#ifndef netsimul_h #define netsimul_h #pragma interface #ifndef MISC_H #include #endif #ifndef MODULE_H #include #endif #include #include struct FIRE_NETWORK{ unsigned long ip; unsigned long mask; }; struct FIRE_RANGE{ unsigned start; unsigned stop; }; // Used to encode a test packet class FIRE_PACKET: public ARRAY_OBJ{ friend class FIRE_RULE; friend class FIRE_CHAINS; FIRE_NETWORK from, to; unsigned from_port, to_port; char inter[20]; // Interface tested unsigned proto; /*~PROTOBEG~ FIRE_PACKET */ public: FIRE_PACKET (unsigned long _from, unsigned _from_port, unsigned long _to, unsigned _to_port, unsigned _proto, const char *_inter); /*~PROTOEND~ FIRE_PACKET */ }; class FIRE_CHAIN; class FIRE_RULE: public ARRAY_OBJ{ friend FIRE_CHAIN; friend class FIRE_CHAINS; FIRE_NETWORK from, to; FIRE_RANGE rfrom,rto; char inter[20]; unsigned proto; FIRE_CHAIN *member; // Chain owning this rule FIRE_CHAIN *target; // Always point to another chain. in most case // this point to the dummy chain ACCEPT. /*~PROTOBEG~ FIRE_RULE */ public: FIRE_RULE (FIRE_NETWORK&_from, FIRE_RANGE&_rfrom, FIRE_NETWORK&_to, FIRE_RANGE&_rto, const char *_inter, unsigned _proto, FIRE_CHAIN *_member, FIRE_CHAIN *_target); void dump (SSTRING&buf); const char *gettarget (void)const; bool is_accept (void)const; bool is_masq (void)const; bool is_terminal (void)const; bool match (FIRE_PACKET&pk); /*~PROTOEND~ FIRE_RULE */ }; class FIRE_RULES: public ARRAY{ /*~PROTOBEG~ FIRE_RULES */ public: FIRE_RULE *getitem (int no)const; /*~PROTOEND~ FIRE_RULES */ }; class FIRE_CHAIN: public ARRAY_OBJ{ public: char name[9]; FIRE_RULES rules; /*~PROTOBEG~ FIRE_CHAIN */ public: FIRE_CHAIN (const char *_name); void add (FIRE_RULE *rule); FIRE_RULE *getitem (int no)const; const char *getname (void)const; int getnb (void)const; int trace (FIRE_RULES&res, FIRE_PACKET&pk); /*~PROTOEND~ FIRE_CHAIN */ }; class FIRE_CHAINS: public ARRAY{ /*~PROTOBEG~ FIRE_CHAINS */ public: FIRE_CHAINS (void); FIRE_CHAIN *getitem (int no)const; FIRE_CHAIN *locate (const char *chain); int read (void); int trace (FIRE_RULES&rules, FIRE_PACKET&pk, const char *chain_name, const char *interface); int trace (FIRE_RULES&rules, FIRE_PACKET&pk, const char *interface_in, const char *interface_out, bool test_input, bool test_forward, bool test_output); /*~PROTOEND~ FIRE_CHAINS */ }; class ROUTE: public ARRAY_OBJ{ public: char inter[20]; unsigned long dest; unsigned long mask; unsigned long gateway; unsigned flags; /*~PROTOBEG~ ROUTE */ /*~PROTOEND~ ROUTE */ }; class ROUTES: public ARRAY{ /*~PROTOBEG~ ROUTES */ public: int read (void); /*~PROTOEND~ ROUTES */ }; #include "netsimul.p" #endif