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

Reply via email to