Thanks for the reminder. In my branch this actually works differently altogether and is, indeed, limited to 16 bits. That'll get pushed into the release version of the destiny branch.
-- Murphy On Feb 1, 2012, at 11:25 AM, Aaron Rosen wrote: > 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)) &0xffff (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()) & 0xffff >>> >>> -- 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 = 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 >>>> >>>> >>>> >>> >>> >>> >>> -- >>> Aaron O. Rosen >>> Masters Student - Network Communication >>> 306B Fluor Daniel >>> >>> >>> >> >> >> >> -- >> 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