From 3446566e449815f180ba31b610d45f9f37aba624 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Tue, 2 Sep 2008 12:01:11 +0200 Subject: [PATCH] Style cleanups for resets. --- src/respond-reject-libnet11.c | 69 ++++++++++++++------------- src/respond-reject.c | 90 ++++++++++++++++++++--------------- 2 files changed, 88 insertions(+), 71 deletions(-) diff --git a/src/respond-reject-libnet11.c b/src/respond-reject-libnet11.c index 5372dc1e5a..5494e8561d 100644 --- a/src/respond-reject-libnet11.c +++ b/src/respond-reject-libnet11.c @@ -1,5 +1,9 @@ /* Copyright (c) 2008 Victor Julien */ +/* Authors: William Metcalf and Victor Julien + * + */ + /* RespondRejectLibnet11 used to send out libnet based * TCP resets and ICMP unreachables. */ @@ -36,7 +40,7 @@ typedef struct _Libnet11Packet u_int16_t sp, dp; } Libnet11Packet; -int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir){ +int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir) { Libnet11Packet lpacket; @@ -67,7 +71,7 @@ int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir){ /* save payload len */ lpacket.dsize = p->tcp_payload_len; - if(dir == REJECT_DIR_SRC){ + if (dir == REJECT_DIR_SRC) { printf ("sending a tcp reset to src\n"); lpacket.seq = TCP_GET_ACK(p); lpacket.ack = TCP_GET_SEQ(p) + lpacket.dsize; @@ -78,7 +82,7 @@ int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir){ lpacket.src4 = GET_IPV4_DST_ADDR_U32(p); lpacket.dst4 = GET_IPV4_SRC_ADDR_U32(p); } - else if(dir == REJECT_DIR_DST){ + else if (dir == REJECT_DIR_DST) { printf ("sending a tcp reset to dst\n"); lpacket.seq = TCP_GET_SEQ(p); lpacket.ack = TCP_GET_ACK(p); @@ -90,8 +94,8 @@ int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir){ lpacket.dst4 = GET_IPV4_DST_ADDR_U32(p); } else { - printf ("reset not src or dst returning\n"); - return 1; + printf ("reset not src or dst returning\n"); + return 1; } lpacket.window = TCP_GET_WINDOW(p); @@ -101,38 +105,38 @@ int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir){ lpacket.ttl = 64; /* build the package */ - if ((t = libnet_build_tcp (lpacket.sp, /* source port */ - lpacket.dp, /* dst port */ - lpacket.seq, /* seq number */ - lpacket.ack, /* ack number */ - TH_RST|TH_ACK, /* flags */ - lpacket.window, /* window size */ - 0, /* checksum */ - 0, /* urgent flag */ - LIBNET_TCP_H, /* header length */ - NULL, /* payload */ - 0, /* payload length */ - c, /* libnet context */ - 0)) < 0) /* libnet ptag */ + if ((t = libnet_build_tcp (lpacket.sp, /* source port */ + lpacket.dp, /* dst port */ + lpacket.seq, /* seq number */ + lpacket.ack, /* ack number */ + TH_RST|TH_ACK, /* flags */ + lpacket.window, /* window size */ + 0, /* checksum */ + 0, /* urgent flag */ + LIBNET_TCP_H, /* header length */ + NULL, /* payload */ + 0, /* payload length */ + c, /* libnet context */ + 0)) < 0) /* libnet ptag */ { printf("RejectSendLibnet11IPv4TCP libnet_build_tcp %s\n", libnet_geterror(c)); goto cleanup; } if((t = libnet_build_ipv4( - LIBNET_TCP_H + LIBNET_IPV4_H, /* entire packet length */ - 0, /* tos */ - lpacket.id, /* ID */ - 0, /* fragmentation flags and offset */ - lpacket.ttl, /* TTL */ - IPPROTO_TCP, /* protocol */ - 0, /* checksum */ + LIBNET_TCP_H + LIBNET_IPV4_H, /* entire packet length */ + 0, /* tos */ + lpacket.id, /* ID */ + 0, /* fragmentation flags and offset */ + lpacket.ttl, /* TTL */ + IPPROTO_TCP, /* protocol */ + 0, /* checksum */ lpacket.src4, /* source address */ lpacket.dst4, /* destination address */ - NULL, /* pointer to packet data (or NULL) */ - 0, /* payload length */ - c, /* libnet context pointer */ - 0)) < 0) /* packet id */ + NULL, /* pointer to packet data (or NULL) */ + 0, /* payload length */ + c, /* libnet context pointer */ + 0)) < 0) /* packet id */ { printf("RejectSendLibnet11IPv4TCP libnet_build_ipv4 %s\n", libnet_geterror(c)); goto cleanup; @@ -144,7 +148,8 @@ int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir){ goto cleanup; } - cleanup: - libnet_destroy (c); - return 0; +cleanup: + libnet_destroy (c); + return 0; } + diff --git a/src/respond-reject.c b/src/respond-reject.c index 94d2e1ba71..796940fdd2 100644 --- a/src/respond-reject.c +++ b/src/respond-reject.c @@ -1,7 +1,14 @@ /* Copyright (c) 2008 Victor Julien */ +/* Author: William Metcalf + * + */ + /* RespondReject is a threaded wrapper for sending Rejects * + * TODO + * - RespondRejectFunc returns 1 on error, 0 on ok... why? For now it should + * just return 0 always, error handling is a TODO in the threading model (VJ) */ #include @@ -16,6 +23,7 @@ #include "tm-queuehandlers.h" #include "tm-modules.h" #include "action-globals.h" + #include "respond-reject.h" #include "respond-reject-libnet11.h" @@ -36,57 +44,61 @@ void TmModuleRespondRejectRegister (void) { int RespondRejectFunc(ThreadVars *tv, Packet *p, void *data) { /* ACTION_REJECT defaults to rejecting the SRC */ - if(p->action != ACTION_REJECT && p->action != ACTION_REJECT_DST && - p->action != ACTION_REJECT_BOTH) { + if (p->action != ACTION_REJECT && p->action != ACTION_REJECT_DST && + p->action != ACTION_REJECT_BOTH) { return 0; - } + } - if(PKT_IS_IPV4(p)){ - if(PKT_IS_TCP(p)){ - return RejectSendIPv4TCP(tv, p, data); - } else if(PKT_IS_UDP(p)){ - return RejectSendIPv4ICMP(tv, p, data); - } else{ - return 0; - } - } else if (PKT_IS_IPV6(p)) { - if(PKT_IS_TCP(p)){ - return RejectSendIPv6TCP(tv, p, data); - } else if(PKT_IS_UDP(p)){ - return RejectSendIPv6ICMP(tv, p, data); - } else{ - return 0; - } - } else{ - printf ("wtf? packet is not ipv4 or ipv6 returning\n"); - return 0; - } + if (PKT_IS_IPV4(p)) { + if (PKT_IS_TCP(p)) { + return RejectSendIPv4TCP(tv, p, data); + } else if(PKT_IS_UDP(p)) { + return RejectSendIPv4ICMP(tv, p, data); + } else { + return 0; + } + } else if (PKT_IS_IPV6(p)) { + if (PKT_IS_TCP(p)) { + return RejectSendIPv6TCP(tv, p, data); + } else if(PKT_IS_UDP(p)){ + return RejectSendIPv6ICMP(tv, p, data); + } else { + return 0; + } + } else { + /* we're only supporting IPv4 and IPv6 */ + return 0; + } } -int RejectSendIPv4TCP(ThreadVars *tv, Packet *p, void *data){ - if(p->action == ACTION_REJECT){ +int RejectSendIPv4TCP(ThreadVars *tv, Packet *p, void *data) { + if (p->action == ACTION_REJECT) { return RejectSendLibnet11L3IPv4TCP(tv, p, data, REJECT_DIR_SRC); - } else if(p->action == ACTION_REJECT_DST){ - return RejectSendLibnet11L3IPv4TCP(tv, p, data, REJECT_DIR_DST); - } else if(p->action == ACTION_REJECT_BOTH){ - if(RejectSendLibnet11L3IPv4TCP(tv, p, data, REJECT_DIR_SRC) == 0 && - RejectSendLibnet11L3IPv4TCP(tv, p, data, REJECT_DIR_DST) == 0){ - return 0; - } else { - return 1; - } - } - return 0; + } else if (p->action == ACTION_REJECT_DST) { + return RejectSendLibnet11L3IPv4TCP(tv, p, data, REJECT_DIR_DST); + } else if(p->action == ACTION_REJECT_BOTH) { + if (RejectSendLibnet11L3IPv4TCP(tv, p, data, REJECT_DIR_SRC) == 0 && + RejectSendLibnet11L3IPv4TCP(tv, p, data, REJECT_DIR_DST) == 0) { + return 0; + } else { + return 1; + } + } + return 0; } -int RejectSendIPv4ICMP(ThreadVars *tv, Packet *p, void *data){ + +/* XXX VJ implement this when we have UDP decoding implemented */ +int RejectSendIPv4ICMP(ThreadVars *tv, Packet *p, void *data) { printf ("we would send a ipv4 icmp reset here\n"); return 1; } -int RejectSendIPv6TCP(ThreadVars *tv, Packet *p, void *data){ + +int RejectSendIPv6TCP(ThreadVars *tv, Packet *p, void *data) { printf ("we would send a ipv6 tcp reset here\n"); return 1; } -int RejectSendIPv6ICMP(ThreadVars *tv, Packet *p, void *data){ + +int RejectSendIPv6ICMP(ThreadVars *tv, Packet *p, void *data) { printf ("we would send a ipv6 icmp reset here\n"); return 1; }