#include <libnet.h>
-typedef struct Libnet11Packet_
-{
+typedef struct Libnet11Packet_ {
uint32_t ack, seq;
uint16_t window, dsize;
uint8_t ttl;
size_t len;
} Libnet11Packet;
-int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir) {
+int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir)
+{
Libnet11Packet lpacket;
libnet_t *c; /* libnet context */
lpacket.flow = 0;
lpacket.class = 0;
- if ((c = libnet_init (LIBNET_RAW4, NULL, ebuf)) == NULL)
- {
+ if ((c = libnet_init(LIBNET_RAW4, NULL, ebuf)) == NULL) {
SCLogError(SC_ERR_LIBNET_INIT,"libnet_inint failed: %s", ebuf);
return 1;
}
/* save payload len */
lpacket.dsize = p->payload_len;
- if (dir == REJECT_DIR_SRC) {
- SCLogDebug("sending a tcp reset to src");
- lpacket.seq = TCP_GET_ACK(p);
- lpacket.ack = TCP_GET_SEQ(p) + lpacket.dsize;
-
- lpacket.sp = TCP_GET_DST_PORT(p);
- lpacket.dp = TCP_GET_SRC_PORT(p);
-
- lpacket.src4 = GET_IPV4_DST_ADDR_U32(p);
- lpacket.dst4 = GET_IPV4_SRC_ADDR_U32(p);
- }
- else if (dir == REJECT_DIR_DST) {
- SCLogDebug("sending a tcp reset to dst");
- lpacket.seq = TCP_GET_SEQ(p);
- lpacket.ack = TCP_GET_ACK(p);
-
- lpacket.sp = TCP_GET_SRC_PORT(p);
- lpacket.dp = TCP_GET_DST_PORT(p);
-
- lpacket.src4 = GET_IPV4_SRC_ADDR_U32(p);
- lpacket.dst4 = GET_IPV4_DST_ADDR_U32(p);
-
- } else {
- SCLogError(SC_ERR_LIBNET_INVALID_DIR,"reset not src or dst returning");
- return 1;
+ switch (dir) {
+ case REJECT_DIR_SRC:
+ SCLogDebug("sending a tcp reset to src");
+ lpacket.seq = TCP_GET_ACK(p);
+ lpacket.ack = TCP_GET_SEQ(p) + lpacket.dsize;
+
+ lpacket.sp = TCP_GET_DST_PORT(p);
+ lpacket.dp = TCP_GET_SRC_PORT(p);
+
+ lpacket.src4 = GET_IPV4_DST_ADDR_U32(p);
+ lpacket.dst4 = GET_IPV4_SRC_ADDR_U32(p);
+ break;
+ case REJECT_DIR_DST:
+ SCLogDebug("sending a tcp reset to dst");
+ lpacket.seq = TCP_GET_SEQ(p);
+ lpacket.ack = TCP_GET_ACK(p);
+
+ lpacket.sp = TCP_GET_SRC_PORT(p);
+ lpacket.dp = TCP_GET_DST_PORT(p);
+
+ lpacket.src4 = GET_IPV4_SRC_ADDR_U32(p);
+ lpacket.dst4 = GET_IPV4_DST_ADDR_U32(p);
+ break;
+ default:
+ SCLogError(SC_ERR_LIBNET_INVALID_DIR,
+ "reset not src or dst returning");
+ return 1;
}
lpacket.window = TCP_GET_WINDOW(p);
lpacket.ttl = 64;
/* build the package */
- if ((libnet_build_tcp (
+ if ((libnet_build_tcp(
lpacket.sp, /* source port */
lpacket.dp, /* dst port */
lpacket.seq, /* seq number */
goto cleanup;
}
- if((libnet_build_ipv4(
+ if ((libnet_build_ipv4(
LIBNET_TCP_H + LIBNET_IPV4_H, /* entire packet length */
0, /* tos */
lpacket.id, /* ID */
return 0;
}
-int RejectSendLibnet11L3IPv4ICMP(ThreadVars *tv, Packet *p, void *data, int dir) {
+int RejectSendLibnet11L3IPv4ICMP(ThreadVars *tv, Packet *p, void *data, int dir)
+{
//printf("going to send a ICMP host unreachable\n");
Libnet11Packet lpacket;
libnet_t *c; /* libnet context */
lpacket.class = 0;
lpacket.len = (IPV4_GET_HLEN(p) + p->payload_len);
- if ((c = libnet_init (LIBNET_RAW4, NULL, ebuf)) == NULL){
+ if ((c = libnet_init(LIBNET_RAW4, NULL, ebuf)) == NULL) {
SCLogError(SC_ERR_LIBNET_INIT,"libnet_inint failed: %s", ebuf);
return 1;
}
- if (dir == REJECT_DIR_SRC) {
- lpacket.src4 = GET_IPV4_DST_ADDR_U32(p);
- lpacket.dst4 = GET_IPV4_SRC_ADDR_U32(p);
- }
- else if (dir == REJECT_DIR_DST) {
- lpacket.src4 = GET_IPV4_SRC_ADDR_U32(p);
- lpacket.dst4 = GET_IPV4_DST_ADDR_U32(p);
-
- } else {
- SCLogError(SC_ERR_LIBNET_INVALID_DIR,"reset not src or dst returning");
- return 1;
+ switch (dir) {
+ case REJECT_DIR_SRC:
+ lpacket.src4 = GET_IPV4_DST_ADDR_U32(p);
+ lpacket.dst4 = GET_IPV4_SRC_ADDR_U32(p);
+ break;
+ case REJECT_DIR_DST:
+ lpacket.src4 = GET_IPV4_SRC_ADDR_U32(p);
+ lpacket.dst4 = GET_IPV4_DST_ADDR_U32(p);
+ break;
+ default:
+ SCLogError(SC_ERR_LIBNET_INVALID_DIR,
+ "reset not src or dst returning");
+ return 1;
}
/* TODO come up with ttl calc function */
lpacket.ttl = 64;
/* build the package */
- if ((libnet_build_icmpv4_unreach (
+ if ((libnet_build_icmpv4_unreach(
ICMP_DEST_UNREACH, /* type */
ICMP_HOST_ANO, /* code */
0, /* checksum */
goto cleanup;
}
- if((libnet_build_ipv4(
+ if ((libnet_build_ipv4(
LIBNET_ICMPV4_H + LIBNET_IPV4_H +
lpacket.len, /* entire packet length */
0, /* tos */
#else
-int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir) {
- SCLogError(SC_ERR_LIBNET_NOT_ENABLED,"Libnet based rejects are disabled. Usually this means that you don't have libnet installed, or configure couldn't find it.");
- return 0;
+int RejectSendLibnet11L3IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir)
+{
+ SCLogError(SC_ERR_LIBNET_NOT_ENABLED, "Libnet based rejects are disabled."
+ "Usually this means that you don't have libnet installed,"
+ " or configure couldn't find it.");
+ return 0;
}
-int RejectSendLibnet11L3IPv4ICMP(ThreadVars *tv, Packet *p, void *data, int dir) {
- SCLogError(SC_ERR_LIBNET_NOT_ENABLED,"Libnet based rejects are disabled. Usually this means that you don't have libnet installed, or configure couldn't find it.");
- return 0;
+int RejectSendLibnet11L3IPv4ICMP(ThreadVars *tv, Packet *p, void *data, int dir)
+{
+ SCLogError(SC_ERR_LIBNET_NOT_ENABLED, "Libnet based rejects are disabled."
+ "Usually this means that you don't have libnet installed,"
+ " or configure couldn't find it.");
+ return 0;
}
#endif /* HAVE_LIBNET11 */