www.pudn.com > nat.rar > ip_nat_proto.cpp
#include#include #include "list.h" #include "ip_nat_tuple.h" #include "Ip_conntrack.h" #include "nat.h" #include "ip_nat_proto.h" struct list_head protocol_list = { &protocol_list, &protocol_list }; int ip_conntrack_protocol_register(struct ip_nat_protocol *proto) { int ret = 0; struct list_head *i; for (i = protocol_list.next; i != &protocol_list; i = i->next) { if (((struct ip_nat_protocol *)i)->proto == proto->proto) { ret = -1; break; } } if(i == &protocol_list) { list_prepend(&protocol_list, proto); } return ret; } static inline int proto_cmpfn(const struct ip_nat_protocol *curr, unsigned char protocol) { return protocol == curr->proto; } struct ip_nat_protocol *find_proto(unsigned char protocol) { struct ip_nat_protocol *p; const struct list_head *h = (&protocol_list); do { h = h->next; if (h == (&protocol_list)) { h = 0; break; } } while (!proto_cmpfn((const struct ip_nat_protocol *)h , protocol)); p = (struct ip_nat_protocol *)h; if (!p) { DEBUGP("Can't find proto %d\n",protocol); } return p; }