I think you just have a field with a bad value. Try replacing the checksum function with something like this to help you spot it:
def checksum(self): try: data = struct.pack('!BBHHBBHII', (self.v << 4) + self.hl, self.tos, self.iplen, self.id, (self.flags << 13) | self.frag, self.ttl, self.protocol, 0, self.srcip, self.dstip) return checksum(data, 0) except: print "bad packet",[(self.v << 4) + self.hl, self.tos, self.iplen, self.id, (self.flags << 13) | self.frag, self.ttl, self.protocol, 0, self.srcip, self.dstip] -- Murphy On Aug 8, 2011, at 1:50 PM, Aaron Rosen wrote: > Hello, > > I emailed the mailing list about this before but it seems like maybe > something changed or maybe I'm blind. Anyways, the following code generates > the following execption. Any ideas what's going wrong? > > > def send_udp(mac, dstip, srcip, port, payload): > l4 = udp() > l4.srcport = 1999 > l4.dstport = 1998 > l4.len = udp.MIN_LEN + len("hello world") > l4.set_payload("hello world") > l4.arr = l4.tostring() > > l3 = ipv4() > l3.iplen = ipv4.MIN_LEN + l4.len > l3.protocol = ipv4.UDP_PROTOCOL > l3.dstip = ipstr_to_int("10.1.1.1") > l3.srcip = ipstr_to_int("10.1.1.2") > l3.set_payload(l4) > > l2 = ethernet() > l2.set_payload(l3) > l2.dst = octstr_to_array("00:00:00:00:00:01") > l2.src = octstr_to_array("00:00:00:00:00:09") > l2.type = ethernet.IP_TYPE > l3.checksum() > l4.csum = l4.checksum() > return l2 > > > 00019|pyrt|ERR:unable to invoke a Python event handler: > Traceback (most recent call last): > File "./nox/lib/util.py", line 114, in f > event.total_len, buffer_id, packet) > File "./nox/coreapps/examples/sos.py", line 626, in packet_in_callback > learn(dpid, inport, packet, packet.arr, bufid) > File "./nox/coreapps/examples/sos.py", line 194, in learn > forward(dpid, inport, packet, packet.arr, bufid, TRUNK_PORT) > File "./nox/coreapps/examples/sos.py", line 315, in forward > ret = install_agent_flows(dpid, inport, packet, buf, bufid, TRUNK_PORT); > File "./nox/coreapps/examples/sos.py", line 575, in install_agent_flows > inform_dest = send_udp(mac, dstip, srcip, port, payload) > File "./nox/coreapps/examples/sos.py", line 89, in send_udp > l3.checksum() > File "./nox/lib/packet/ipv4.py", line 162, in checksum > self.dstip) > error: 'H' format requires 0 <= number <= 65535 > > > On Mon, Jun 20, 2011 at 1:59 PM, Aaron Rosen <aro...@clemson.edu> wrote: > Thanks Murphy! > > You're right, that did the trick. > > Aaron > > On Mon, Jun 20, 2011 at 1:55 PM, Murphy McCauley <jam...@nau.edu> wrote: > > So I think the call to l3.checksum() is extraneous, but the real issue is > > probably that l3.iplen should be ipv4.MIN_LEN + l4.len. > > > > -- Murphy > > > > On Monday, June 20, 2011 09:42:07 AM Aaron Rosen wrote: > >> Hi Murphy, > >> > >> wow... Opps... > >> > >> I'm trying the following: This doesn't return any errors but in > >> wireshark the packet_outs say Malformed UDP packets. > >> > >> def send_udp_message(): > >> > >> l4 = udp() > >> l4.srcport = 1999 > >> l4.dstport = 1888 > >> l4.len = udp.MIN_LEN + len("hello_world") > >> l4.set_payload("Hello_world") > >> l4.arr = l4.tostring() > >> > >> l3 = ipv4() > >> l3.iplen = ipv4.MIN_LEN > >> l3.protocol = ipv4.UDP_PROTOCOL > >> l3.dstip = ipstr_to_int("130.127.39.7"); > >> l3.srcip = ipstr_to_int("1.1.1.1"); > >> l3.set_payload(l4) > >> > >> l2 = ethernet() > >> l2.set_payload(l3) > >> l2.dst = octstr_to_array("00:00:00:00:00:02") > >> l2.dst = octstr_to_array("a1:00:04:00:0a:04") > >> l2.type = ethernet.IP_TYPE > >> l3.checksum() > >> l4.csum = l4.checksum() > >> > >> return l2 > >> > >> .... > >> inst.send_openflow_packet(dpid, send_udp_message().tostring(), > >> openflow.OFPP_FLOOD, inport) > >> source = mac_to_str(packet.src) > >> > >> On Mon, Jun 20, 2011 at 12:29 PM, Murphy McCauley <jam...@nau.edu> wrote: > >> > Unfortunately, your tweak breaks the logic of the assert. > >> > > >> > The assert is asserting that self.next is a packet_base of some sort OR a > >> > string. You've set it to a string, so... it should be a string. So it > >> > should definitely not be a packet_base. So the first of your asserts > >> > will always fail. > >> > > >> > For the sake of testing, would you please comment out the first of your > >> > two asserts (leaving only the one against type('')), and let me know the > >> > result? > >> > > >> > -- Murphy > >> > > >> > On Monday, June 20, 2011 09:22:23 AM Aaron Rosen wrote: > >> >> Hi Murphy, > >> >> > >> >> I'm using zaku but the one in destiny looked the same to be. > >> >> > >> >> I changed to assert to be on two lines so I could see which one was > >> >> firing. > >> >> > >> >> def checksum(self): > >> >> #assert(isinstance(self.next, packet_base) or type(self.next) > >> >> == type('')) > >> >> assert(isinstance(self.next, packet_base)) > >> >> assert(type(self.next) == type('')) > >> >> > >> >> > >> >> Thanks, > >> >> > >> >> Aaron > >> >> > >> >> On Mon, Jun 20, 2011 at 12:19 PM, Murphy McCauley <jam...@nau.edu> > >> >> wrote: > >> >> > What NOX are you using? Your udp.py does not seem to be the one in > >> >> > zaku or destiny... > >> >> > > >> >> > -- Murphy > >> >> > > >> >> > On Sunday, June 19, 2011 03:34:20 PM Aaron Rosen wrote: > >> >> >> Hello, > >> >> >> > >> >> >> I'm trying to send udp packets from my controller but I'm getting the > >> >> >> following assertion when I call udp().checksum(). I was hoping > >> >> >> someone could point out where I'm going wrong. > >> >> >> > >> >> >> Thanks, > >> >> >> > >> >> >> Aaron > >> >> >> > >> >> >> Traceback (most recent call last): > >> >> >> File "./nox/lib/util.py", line 116, in f > >> >> >> event.total_len, buffer_id, packet) > >> >> >> File "./nox/coreapps/examples/sos.py", line 299, in > >> >> >> packet_in_callback learn(dpid, inport, packet) > >> >> >> File "./nox/coreapps/examples/sos.py", line 56, in learn > >> >> >> send_packet = send_udp_message() > >> >> >> File "./nox/coreapps/examples/sos.py", line 48, in send_udp_message > >> >> >> l4.csum = l4.checksum() > >> >> >> File "./nox/lib/packet/udp.py", line 111, in checksum > >> >> >> assert(isinstance(self.next, packet_base)) > >> >> >> AssertionError > >> >> >> > >> >> >> > >> >> >> def send_udp_message(): > >> >> >> > >> >> >> l4 = udp() > >> >> >> l4.srcport = 1999 > >> >> >> l4.dstport = 1888 > >> >> >> l4.len = udp.MIN_LEN + len("hello_world") > >> >> >> l4.set_payload("Hello_world") > >> >> >> > >> >> >> l3 = ipv4() > >> >> >> l3.iplen = ipv4.MIN_LEN > >> >> >> l3.protocol = ipv4.UDP_PROTOCOL > >> >> >> l3.dstip = ipstr_to_int("130.127.39.7"); > >> >> >> l3.srcip = ipstr_to_int("1.1.1.1"); > >> >> >> l3.set_payload(l4) > >> >> >> > >> >> >> l2 = ethernet() > >> >> >> l2.set_payload(l3) > >> >> >> l2.dst = octstr_to_array("00:00:00:00:00:02") > >> >> >> l2.dst = octstr_to_array("a1:00:04:00:0a:04") > >> >> >> l2.type = ethernet.IP_TYPE > >> >> >> l3.checksum() > >> >> >> l4.csum = l4.checksum() > >> >> >> > >> >> >> return l2 > >> >> >> > >> >> >> > >> >> >> .... > >> >> >> send_packet = send_udp_message() > >> >> >> inst.send_openflow_packet(dpid, send_packet.tostring(), > >> >> >> openflow.OFPP_FLOOD, inport) > > > > > > -- > Aaron O. Rosen > Masters Student - Network Communication > 306B Fluor Daniel > > > > -- > Aaron O. Rosen > Masters Student - Network Communication > 306B Fluor Daniel > >
_______________________________________________ nox-dev mailing list nox-dev@noxrepo.org http://noxrepo.org/mailman/listinfo/nox-dev