Hi Srini, What is this packet? The length of TCP is zero?!?! I wish to understand the circumstance for which we are getting the packet before commenting on the right way to handle this.
Regards KK On 13 January 2011 10:38, Srini Seetharaman <[email protected]> wrote: > When someone sends the attached packet to a switch, it generates an > infinite loop of packet_ins in our production network. This is because > this incoming tcp packet has nw_proto=6 and tcp port numbers of "0", > but outgoing flow_mod has nw_proto of "0" and tcp port numbers of "0". > So, the packet_out generates a new packet_in and this loop continues > forever. > > I see the following code in src/lib/flow.cc (both in NOX-Zaku and > SNAC). I believe this is what is causing the nw_proto to be "0" in the > flow_mod. I'm not sure who wrote that piece of code. This is not > handling corrupted packets well and rejecting this packet as a invalid > TCP packet. Does anyone see problems with removing the "else" clause? > > if (nw_proto == ip_::proto::TCP) { > const tcp_header *tcp = pull_tcp(b); > if (tcp) { > tp_src = tcp->tcp_src; > tp_dst = tcp->tcp_dst; > } else { > /* Avoid tricking other code into thinking that > * this packet has an L4 header. */ > nw_proto = 0; > } > } > > FYI, pull_tcp is defined as below: > static const tcp_header * pull_tcp(Buffer& b) > { > if (const tcp_header *tcp = b.try_at<tcp_header>(0)) { > int tcp_len = TCP_OFFSET(tcp->tcp_ctl) * 4; > if (tcp_len >= sizeof *tcp) { > return reinterpret_cast<const > tcp_header*>(b.try_pull(tcp_len)); > } > } > return 0; > } > > _______________________________________________ > nox-dev mailing list > [email protected] > http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org > > _______________________________________________ nox-dev mailing list [email protected] http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org
