Re: [nox-dev] Assertion on udp.checksum()
Hello, I was just merging my local changes with whats in the git and noticed this change never made it in. In ipv4.py self.id = int(time.time()) but this should be self.id = int(time.time)) 0x (since the field is only 2bytes) Aaron On Mon, Aug 8, 2011 at 6:31 PM, Murphy McCauley jam...@nau.edu wrote: It's the identification field of the IPv4 header. Mostly this is used to match up fragments (which should all retain the same value). So time.time() isn't really a very good value for it anyway, as it should be relatively unique, but int(time.time()) is only unique for packets sent in different seconds which seems like a fairly unsafe assumption. We should probably just use a counter. Which, looking at the code... it looks like may have been done in the past (ip_id field) and then changed. It should probably be changed back. :) I think that's what I did when I fixed it before; it must just have not made it out of some experimental branch. Sorry it got you! -- Murphy On Aug 8, 2011, at 3:18 PM, Aaron Rosen wrote: Thanks that did the trick. Yea I thought this was strange too since this used to work a while ago. Out of curiosity what is id in ipv4.py I see that it holds the time but why is that needed? Thanks again, Aaron On Mon, Aug 8, 2011 at 6:13 PM, Murphy McCauley jam...@nau.edu wrote: Strange, I am positive that I have fixed this. Maybe it just hasn't gotten pushed yet. In ipv4.py around line 76, try something like... self.id = int(time.time()) 0x -- Murphy On Aug 8, 2011, at 3:08 PM, Aaron Rosen wrote: Thanks, I hate to bug you again but this looks fine to me? iplen = 39 len(hello world)(11) + udp header(8) + 20 (ip_header) 17 = UDP_PROTOCOL bad packet [69, 0, 39, 1312840938, 0, 64, 17, 0, 167837954, 167837953] 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 644, in packet_in_callback learn(dpid, inport, packet, packet.arr, bufid) File ./nox/coreapps/examples/sos.py, line 212, in learn forward(dpid, inport, packet, packet.arr, bufid, TRUNK_PORT) File ./nox/coreapps/examples/sos.py, line 333, in forward ret = install_agent_flows(dpid, inport, packet, buf, bufid, TRUNK_PORT); File ./nox/coreapps/examples/sos.py, line 594, in install_agent_flows inst.send_openflow_packet(dp_near, inform_dest.tostring(), inst.Agents[dp_near]['inport'], inport) File ./nox/lib/packet/packet_base.py, line 118, in tostring return ''.join((buf, self.next.tostring())) File ./nox/lib/packet/packet_base.py, line 113, in tostring buf = self.hdr() File ./nox/lib/packet/ipv4.py, line 179, in hdr self.dstip) error: 'H' format requires 0 = number = 65535 On Mon, Aug 8, 2011 at 5:32 PM, Murphy McCauley jam...@nau.edu wrote: 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
Re: [nox-dev] Assertion on udp.checksum()
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
Re: [nox-dev] Assertion on udp.checksum()
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
Re: [nox-dev] Assertion on udp.checksum()
Thanks, I hate to bug you again but this looks fine to me? iplen = 39 len(hello world)(11) + udp header(8) + 20 (ip_header) 17 = UDP_PROTOCOL bad packet [69, 0, 39, 1312840938, 0, 64, 17, 0, 167837954, 167837953] 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 644, in packet_in_callback learn(dpid, inport, packet, packet.arr, bufid) File ./nox/coreapps/examples/sos.py, line 212, in learn forward(dpid, inport, packet, packet.arr, bufid, TRUNK_PORT) File ./nox/coreapps/examples/sos.py, line 333, in forward ret = install_agent_flows(dpid, inport, packet, buf, bufid, TRUNK_PORT); File ./nox/coreapps/examples/sos.py, line 594, in install_agent_flows inst.send_openflow_packet(dp_near, inform_dest.tostring(), inst.Agents[dp_near]['inport'], inport) File ./nox/lib/packet/packet_base.py, line 118, in tostring return ''.join((buf, self.next.tostring())) File ./nox/lib/packet/packet_base.py, line 113, in tostring buf = self.hdr() File ./nox/lib/packet/ipv4.py, line 179, in hdr self.dstip) error: 'H' format requires 0 = number = 65535 On Mon, Aug 8, 2011 at 5:32 PM, Murphy McCauley jam...@nau.edu wrote: 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 =
Re: [nox-dev] Assertion on udp.checksum()
Strange, I am positive that I have fixed this. Maybe it just hasn't gotten pushed yet. In ipv4.py around line 76, try something like... self.id = int(time.time()) 0x -- Murphy On Aug 8, 2011, at 3:08 PM, Aaron Rosen wrote: Thanks, I hate to bug you again but this looks fine to me? iplen = 39 len(hello world)(11) + udp header(8) + 20 (ip_header) 17 = UDP_PROTOCOL bad packet [69, 0, 39, 1312840938, 0, 64, 17, 0, 167837954, 167837953] 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 644, in packet_in_callback learn(dpid, inport, packet, packet.arr, bufid) File ./nox/coreapps/examples/sos.py, line 212, in learn forward(dpid, inport, packet, packet.arr, bufid, TRUNK_PORT) File ./nox/coreapps/examples/sos.py, line 333, in forward ret = install_agent_flows(dpid, inport, packet, buf, bufid, TRUNK_PORT); File ./nox/coreapps/examples/sos.py, line 594, in install_agent_flows inst.send_openflow_packet(dp_near, inform_dest.tostring(), inst.Agents[dp_near]['inport'], inport) File ./nox/lib/packet/packet_base.py, line 118, in tostring return ''.join((buf, self.next.tostring())) File ./nox/lib/packet/packet_base.py, line 113, in tostring buf = self.hdr() File ./nox/lib/packet/ipv4.py, line 179, in hdr self.dstip) error: 'H' format requires 0 = number = 65535 On Mon, Aug 8, 2011 at 5:32 PM, Murphy McCauley jam...@nau.edu wrote: 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 =
Re: [nox-dev] Assertion on udp.checksum()
Thanks that did the trick. Yea I thought this was strange too since this used to work a while ago. Out of curiosity what is id in ipv4.py I see that it holds the time but why is that needed? Thanks again, Aaron On Mon, Aug 8, 2011 at 6:13 PM, Murphy McCauley jam...@nau.edu wrote: Strange, I am positive that I have fixed this. Maybe it just hasn't gotten pushed yet. In ipv4.py around line 76, try something like... self.id = int(time.time()) 0x -- Murphy On Aug 8, 2011, at 3:08 PM, Aaron Rosen wrote: Thanks, I hate to bug you again but this looks fine to me? iplen = 39 len(hello world)(11) + udp header(8) + 20 (ip_header) 17 = UDP_PROTOCOL bad packet [69, 0, 39, 1312840938, 0, 64, 17, 0, 167837954, 167837953] 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 644, in packet_in_callback learn(dpid, inport, packet, packet.arr, bufid) File ./nox/coreapps/examples/sos.py, line 212, in learn forward(dpid, inport, packet, packet.arr, bufid, TRUNK_PORT) File ./nox/coreapps/examples/sos.py, line 333, in forward ret = install_agent_flows(dpid, inport, packet, buf, bufid, TRUNK_PORT); File ./nox/coreapps/examples/sos.py, line 594, in install_agent_flows inst.send_openflow_packet(dp_near, inform_dest.tostring(), inst.Agents[dp_near]['inport'], inport) File ./nox/lib/packet/packet_base.py, line 118, in tostring return ''.join((buf, self.next.tostring())) File ./nox/lib/packet/packet_base.py, line 113, in tostring buf = self.hdr() File ./nox/lib/packet/ipv4.py, line 179, in hdr self.dstip) error: 'H' format requires 0 = number = 65535 On Mon, Aug 8, 2011 at 5:32 PM, Murphy McCauley jam...@nau.edu wrote: 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
Re: [nox-dev] Assertion on udp.checksum()
It's the identification field of the IPv4 header. Mostly this is used to match up fragments (which should all retain the same value). So time.time() isn't really a very good value for it anyway, as it should be relatively unique, but int(time.time()) is only unique for packets sent in different seconds which seems like a fairly unsafe assumption. We should probably just use a counter. Which, looking at the code... it looks like may have been done in the past (ip_id field) and then changed. It should probably be changed back. :) I think that's what I did when I fixed it before; it must just have not made it out of some experimental branch. Sorry it got you! -- Murphy On Aug 8, 2011, at 3:18 PM, Aaron Rosen wrote: Thanks that did the trick. Yea I thought this was strange too since this used to work a while ago. Out of curiosity what is id in ipv4.py I see that it holds the time but why is that needed? Thanks again, Aaron On Mon, Aug 8, 2011 at 6:13 PM, Murphy McCauley jam...@nau.edu wrote: Strange, I am positive that I have fixed this. Maybe it just hasn't gotten pushed yet. In ipv4.py around line 76, try something like... self.id = int(time.time()) 0x -- Murphy On Aug 8, 2011, at 3:08 PM, Aaron Rosen wrote: Thanks, I hate to bug you again but this looks fine to me? iplen = 39 len(hello world)(11) + udp header(8) + 20 (ip_header) 17 = UDP_PROTOCOL bad packet [69, 0, 39, 1312840938, 0, 64, 17, 0, 167837954, 167837953] 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 644, in packet_in_callback learn(dpid, inport, packet, packet.arr, bufid) File ./nox/coreapps/examples/sos.py, line 212, in learn forward(dpid, inport, packet, packet.arr, bufid, TRUNK_PORT) File ./nox/coreapps/examples/sos.py, line 333, in forward ret = install_agent_flows(dpid, inport, packet, buf, bufid, TRUNK_PORT); File ./nox/coreapps/examples/sos.py, line 594, in install_agent_flows inst.send_openflow_packet(dp_near, inform_dest.tostring(), inst.Agents[dp_near]['inport'], inport) File ./nox/lib/packet/packet_base.py, line 118, in tostring return ''.join((buf, self.next.tostring())) File ./nox/lib/packet/packet_base.py, line 113, in tostring buf = self.hdr() File ./nox/lib/packet/ipv4.py, line 179, in hdr self.dstip) error: 'H' format requires 0 = number = 65535 On Mon, Aug 8, 2011 at 5:32 PM, Murphy McCauley jam...@nau.edu wrote: 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
Re: [nox-dev] Assertion on udp.checksum()
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) ___ nox-dev mailing list nox-dev@noxrepo.org http://noxrepo.org/mailman/listinfo/nox-dev
Re: [nox-dev] Assertion on udp.checksum()
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 ___ nox-dev mailing list nox-dev@noxrepo.org http://noxrepo.org/mailman/listinfo/nox-dev
Re: [nox-dev] Assertion on udp.checksum()
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 ___ nox-dev mailing list nox-dev@noxrepo.org http://noxrepo.org/mailman/listinfo/nox-dev