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
> 
> 

_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev

Reply via email to