From cdc8744396470397dcbb9b50dc197526c4cb834c Mon Sep 17 00:00:00 2001 From: "/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org" Date: Sun, 13 Jan 2008 17:17:11 +0000 Subject: Several tree reorganizations: - move l3extensions/ and extensions/ to src/deprecated/ - don't create submodules under /usr/lib/libnetfilter_conntrack/ anymore --- .../extensions/libnetfilter_conntrack_sctp.c | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/deprecated/extensions/libnetfilter_conntrack_sctp.c (limited to 'src/deprecated/extensions/libnetfilter_conntrack_sctp.c') diff --git a/src/deprecated/extensions/libnetfilter_conntrack_sctp.c b/src/deprecated/extensions/libnetfilter_conntrack_sctp.c new file mode 100644 index 0000000..3785c2e --- /dev/null +++ b/src/deprecated/extensions/libnetfilter_conntrack_sctp.c @@ -0,0 +1,100 @@ +/* + * (C) 2005 by Pablo Neira Ayuso + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + */ +#include +#include +#include +#include +#include /* For htons */ +#include +#include +#include +#include + +static void parse_proto(struct nfattr *cda[], struct nfct_tuple *tuple) +{ + if (cda[CTA_PROTO_SRC_PORT-1]) + tuple->l4src.sctp.port = + *(u_int16_t *)NFA_DATA(cda[CTA_PROTO_SRC_PORT-1]); + if (cda[CTA_PROTO_DST_PORT-1]) + tuple->l4dst.sctp.port = + *(u_int16_t *)NFA_DATA(cda[CTA_PROTO_DST_PORT-1]); +} + +static void parse_protoinfo(struct nfattr *cda[], struct nfct_conntrack *ct) +{ +/* if (cda[CTA_PROTOINFO_SCTP_STATE-1]) + ct->protoinfo.sctp.state = + *(u_int8_t *)NFA_DATA(cda[CTA_PROTOINFO_SCTP_STATE-1]); +*/ +} + +static void build_tuple_proto(struct nfnlhdr *req, int size, + struct nfct_tuple *t) +{ + nfnl_addattr_l(&req->nlh, size, CTA_PROTO_SRC_PORT, + &t->l4src.sctp.port, sizeof(u_int16_t)); + nfnl_addattr_l(&req->nlh, size, CTA_PROTO_DST_PORT, + &t->l4dst.sctp.port, sizeof(u_int16_t)); +} + +static int print_protoinfo(char *buf, union nfct_protoinfo *protoinfo) +{ +/* fprintf(stdout, "%s ", states[protoinfo->sctp.state]); */ + return 0; +} + +static int print_proto(char *buf, struct nfct_tuple *tuple) +{ + return(sprintf(buf, "sport=%u dport=%u ", htons(tuple->l4src.sctp.port), + htons(tuple->l4dst.sctp.port))); +} + +static int compare(struct nfct_conntrack *ct1, + struct nfct_conntrack *ct2, + unsigned int flags) +{ + if (flags & SCTP_ORIG_SPORT) + if (ct1->tuple[NFCT_DIR_ORIGINAL].l4src.sctp.port != + ct2->tuple[NFCT_DIR_ORIGINAL].l4src.sctp.port) + return 0; + if (flags & SCTP_ORIG_DPORT) + if (ct1->tuple[NFCT_DIR_ORIGINAL].l4dst.sctp.port != + ct2->tuple[NFCT_DIR_ORIGINAL].l4dst.sctp.port) + return 0; + if (flags & SCTP_REPL_SPORT) + if (ct1->tuple[NFCT_DIR_REPLY].l4src.sctp.port != + ct2->tuple[NFCT_DIR_REPLY].l4src.sctp.port) + return 0; + if (flags & SCTP_REPL_DPORT) + if (ct1->tuple[NFCT_DIR_REPLY].l4dst.sctp.port != + ct2->tuple[NFCT_DIR_REPLY].l4dst.sctp.port) + return 0; + + return 1; +} + +static struct nfct_proto sctp = { + .name = "sctp", + .protonum = IPPROTO_SCTP, + .parse_proto = parse_proto, + .parse_protoinfo = parse_protoinfo, + .build_tuple_proto = build_tuple_proto, + .print_proto = print_proto, + .print_protoinfo = print_protoinfo, + .compare = compare, + .version = VERSION +}; + +static void __attribute__ ((constructor)) init(void); + +static void init(void) +{ + nfct_register_proto(&sctp); +} -- cgit v1.2.3