|
|
@ -4410,21 +4410,21 @@ static inline int StreamTcpValidateChecksum(Packet *p)
|
|
|
|
if (p->flags & PKT_IGNORE_CHECKSUM)
|
|
|
|
if (p->flags & PKT_IGNORE_CHECKSUM)
|
|
|
|
return ret;
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
|
|
if (p->comp_csum == -1) {
|
|
|
|
if (p->level4_comp_csum == -1) {
|
|
|
|
if (PKT_IS_IPV4(p)) {
|
|
|
|
if (PKT_IS_IPV4(p)) {
|
|
|
|
p->comp_csum = TCPCalculateChecksum(p->ip4h->s_ip_addrs,
|
|
|
|
p->level4_comp_csum = TCPCalculateChecksum(p->ip4h->s_ip_addrs,
|
|
|
|
(uint16_t *)p->tcph,
|
|
|
|
(uint16_t *)p->tcph,
|
|
|
|
(p->payload_len +
|
|
|
|
(p->payload_len +
|
|
|
|
TCP_GET_HLEN(p)));
|
|
|
|
TCP_GET_HLEN(p)));
|
|
|
|
} else if (PKT_IS_IPV6(p)) {
|
|
|
|
} else if (PKT_IS_IPV6(p)) {
|
|
|
|
p->comp_csum = TCPV6CalculateChecksum(p->ip6h->s_ip6_addrs,
|
|
|
|
p->level4_comp_csum = TCPV6CalculateChecksum(p->ip6h->s_ip6_addrs,
|
|
|
|
(uint16_t *)p->tcph,
|
|
|
|
(uint16_t *)p->tcph,
|
|
|
|
(p->payload_len +
|
|
|
|
(p->payload_len +
|
|
|
|
TCP_GET_HLEN(p)));
|
|
|
|
TCP_GET_HLEN(p)));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (p->comp_csum != p->tcph->th_sum) {
|
|
|
|
if (p->level4_comp_csum != p->tcph->th_sum) {
|
|
|
|
ret = 0;
|
|
|
|
ret = 0;
|
|
|
|
SCLogDebug("Checksum of received packet %p is invalid",p);
|
|
|
|
SCLogDebug("Checksum of received packet %p is invalid",p);
|
|
|
|
if (p->livedev) {
|
|
|
|
if (p->livedev) {
|
|
|
@ -8375,7 +8375,7 @@ static int StreamTcpTest29(void)
|
|
|
|
p.payload = packet;
|
|
|
|
p.payload = packet;
|
|
|
|
p.ip4h = &ipv4h;
|
|
|
|
p.ip4h = &ipv4h;
|
|
|
|
p.tcpc = tcpc;
|
|
|
|
p.tcpc = tcpc;
|
|
|
|
p.tcpc.comp_csum = -1;
|
|
|
|
p.tcpc.level4_comp_csum = -1;
|
|
|
|
tcpvars.hlen = 20;
|
|
|
|
tcpvars.hlen = 20;
|
|
|
|
p.tcpvars = tcpvars;
|
|
|
|
p.tcpvars = tcpvars;
|
|
|
|
ssn.state = TCP_ESTABLISHED;
|
|
|
|
ssn.state = TCP_ESTABLISHED;
|
|
|
@ -8398,9 +8398,6 @@ static int StreamTcpTest29(void)
|
|
|
|
ssn.server.last_ack = 119197101;
|
|
|
|
ssn.server.last_ack = 119197101;
|
|
|
|
ssn.server.ra_base_seq = 119197101;
|
|
|
|
ssn.server.ra_base_seq = 119197101;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tcph.th_flags = TH_PUSH | TH_ACK;
|
|
|
|
tcph.th_flags = TH_PUSH | TH_ACK;
|
|
|
|
p.flowflags = FLOW_PKT_TOSERVER;
|
|
|
|
p.flowflags = FLOW_PKT_TOSERVER;
|
|
|
|
p.tcph->th_seq = htonl(11);
|
|
|
|
p.tcph->th_seq = htonl(11);
|
|
|
@ -8408,9 +8405,9 @@ static int StreamTcpTest29(void)
|
|
|
|
p.payload_len = 4;
|
|
|
|
p.payload_len = 4;
|
|
|
|
p.ip4h->ip_src = addr1;
|
|
|
|
p.ip4h->ip_src = addr1;
|
|
|
|
p.tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p.ip4h->ip_src),
|
|
|
|
p.tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p.ip4h->ip_src),
|
|
|
|
(uint16_t *)p.tcph,
|
|
|
|
(uint16_t *)p.tcph,
|
|
|
|
(p.payload_len +
|
|
|
|
(p.payload_len +
|
|
|
|
p.tcpvars.hlen) );
|
|
|
|
p.tcpvars.hlen) );
|
|
|
|
|
|
|
|
|
|
|
|
if (StreamTcp(&tv, &p, (void *)&stt, NULL, NULL) != TM_ECODE_OK) {
|
|
|
|
if (StreamTcp(&tv, &p, (void *)&stt, NULL, NULL) != TM_ECODE_OK) {
|
|
|
|
printf("failed in segment reassmebling\n");
|
|
|
|
printf("failed in segment reassmebling\n");
|
|
|
@ -8519,7 +8516,7 @@ static int StreamTcpTest30(void)
|
|
|
|
p.payload = payload;
|
|
|
|
p.payload = payload;
|
|
|
|
p.ip4h = &ipv4h;
|
|
|
|
p.ip4h = &ipv4h;
|
|
|
|
p.tcpc = tcpc;
|
|
|
|
p.tcpc = tcpc;
|
|
|
|
p.tcpc.comp_csum = -1;
|
|
|
|
p.tcpc.level4_comp_csum = -1;
|
|
|
|
p.tcpvars = tcpvars;
|
|
|
|
p.tcpvars = tcpvars;
|
|
|
|
ssn.state = TCP_ESTABLISHED;
|
|
|
|
ssn.state = TCP_ESTABLISHED;
|
|
|
|
addr.s_addr = inet_addr("10.1.3.53");
|
|
|
|
addr.s_addr = inet_addr("10.1.3.53");
|
|
|
@ -8657,7 +8654,7 @@ static int StreamTcpTest31(void)
|
|
|
|
p.tcph = &tcph;
|
|
|
|
p.tcph = &tcph;
|
|
|
|
p.ip4h = &ipv4h;
|
|
|
|
p.ip4h = &ipv4h;
|
|
|
|
p.tcpc = tcpc;
|
|
|
|
p.tcpc = tcpc;
|
|
|
|
p.tcpc.comp_csum = -1;
|
|
|
|
p.tcpc.level4_comp_csum = -1;
|
|
|
|
p.tcpvars = tcpvars;
|
|
|
|
p.tcpvars = tcpvars;
|
|
|
|
p.tcpvars.ts = &tcpopt;
|
|
|
|
p.tcpvars.ts = &tcpopt;
|
|
|
|
addr.s_addr = inet_addr("10.1.3.53");
|
|
|
|
addr.s_addr = inet_addr("10.1.3.53");
|
|
|
@ -8699,11 +8696,11 @@ static int StreamTcpTest31(void)
|
|
|
|
p.payload_len = 0;
|
|
|
|
p.payload_len = 0;
|
|
|
|
p.ip4h->ip_src = addr1;
|
|
|
|
p.ip4h->ip_src = addr1;
|
|
|
|
p.tcpc.ts1 = 10;
|
|
|
|
p.tcpc.ts1 = 10;
|
|
|
|
p.tcpc.comp_csum = -1;
|
|
|
|
p.tcpc.level4_comp_csum = -1;
|
|
|
|
p.tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p.ip4h->ip_src),
|
|
|
|
p.tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p.ip4h->ip_src),
|
|
|
|
(uint16_t *)p.tcph,
|
|
|
|
(uint16_t *)p.tcph,
|
|
|
|
(p.payload_len +
|
|
|
|
(p.payload_len +
|
|
|
|
p.tcpvars.hlen) );
|
|
|
|
p.tcpvars.hlen) );
|
|
|
|
|
|
|
|
|
|
|
|
if (StreamTcp(&tv, &p, (void *)&stt, NULL, NULL) != TM_ECODE_OK) {
|
|
|
|
if (StreamTcp(&tv, &p, (void *)&stt, NULL, NULL) != TM_ECODE_OK) {
|
|
|
|
printf("failed in segment reassmebling\n");
|
|
|
|
printf("failed in segment reassmebling\n");
|
|
|
@ -8719,11 +8716,11 @@ static int StreamTcpTest31(void)
|
|
|
|
p.payload_len = 0;
|
|
|
|
p.payload_len = 0;
|
|
|
|
p.tcpc.ts1 = 10;
|
|
|
|
p.tcpc.ts1 = 10;
|
|
|
|
p.ip4h->ip_src = addr;
|
|
|
|
p.ip4h->ip_src = addr;
|
|
|
|
p.tcpc.comp_csum = -1;
|
|
|
|
p.tcpc.level4_comp_csum = -1;
|
|
|
|
p.tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p.ip4h->ip_src),
|
|
|
|
p.tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p.ip4h->ip_src),
|
|
|
|
(uint16_t *)p.tcph,
|
|
|
|
(uint16_t *)p.tcph,
|
|
|
|
(p.payload_len +
|
|
|
|
(p.payload_len +
|
|
|
|
p.tcpvars.hlen) );
|
|
|
|
p.tcpvars.hlen) );
|
|
|
|
|
|
|
|
|
|
|
|
if (StreamTcp(&tv, &p, (void *)&stt, NULL, NULL) != TM_ECODE_OK) {
|
|
|
|
if (StreamTcp(&tv, &p, (void *)&stt, NULL, NULL) != TM_ECODE_OK) {
|
|
|
|
printf("failed in segment reassmebling\n");
|
|
|
|
printf("failed in segment reassmebling\n");
|
|
|
@ -8738,11 +8735,11 @@ static int StreamTcpTest31(void)
|
|
|
|
p.payload_len = 0;
|
|
|
|
p.payload_len = 0;
|
|
|
|
p.tcpc.ts1 = 10;
|
|
|
|
p.tcpc.ts1 = 10;
|
|
|
|
p.ip4h->ip_src = addr1;
|
|
|
|
p.ip4h->ip_src = addr1;
|
|
|
|
p.tcpc.comp_csum = -1;
|
|
|
|
p.tcpc.level4_comp_csum = -1;
|
|
|
|
p.tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p.ip4h->ip_src),
|
|
|
|
p.tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p.ip4h->ip_src),
|
|
|
|
(uint16_t *)p.tcph,
|
|
|
|
(uint16_t *)p.tcph,
|
|
|
|
(p.payload_len +
|
|
|
|
(p.payload_len +
|
|
|
|
p.tcpvars.hlen) );
|
|
|
|
p.tcpvars.hlen) );
|
|
|
|
|
|
|
|
|
|
|
|
if (StreamTcp(&tv, &p, (void *)&stt, NULL, NULL) != TM_ECODE_OK) {
|
|
|
|
if (StreamTcp(&tv, &p, (void *)&stt, NULL, NULL) != TM_ECODE_OK) {
|
|
|
|
printf("failed in segment reassmebling\n");
|
|
|
|
printf("failed in segment reassmebling\n");
|
|
|
|