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

Reply via email to