Thanks for your advise:) I will transefer to POX after ending of this project.
Thanks a lot Weiyang 2012/4/26 Murphy McCauley <[email protected]> > Just a note that the packet library in POX is a considerable improvement > over the one in NOX. If you're writing code in Python, you might consider > using POX instead. > > -- Murphy > > On Apr 26, 2012, at 10:01 AM, Weiyang Mo wrote: > > Hi, Aaron, > > I tried my code on real network today. From wireshark, I see that the new > packets are sent to all hosts. However they are multicast which all hosts > receive these IP packets. > > But I set eth_packet.dst = packet.dst (ff:ff:ff:ff:ff:ff:ff) , > eth_packet.src = packet.src > I think that means that the new packet shouldn't find the destination > since it is ff:ff:... Then why my hosts can get the new packets? > > If I want to manually set the MAC address(For instance, > 00:00:00:00:00:02), what should I do with eth_packet.dst > > eth_packet.dst = mac_to_int("00:00:00:00:00:02") makes an error. > > Thanks very much. > > Weiyang > > 2012/4/25 Aaron Rosen <[email protected]> > >> Can you make the following change to ipv4.py and see if this fixes it? >> >> >> ~line 76 >> - self.id = int(time.time()) >> + self.id = int(time.time()) & 0xffff >> >> >> On Wed, Apr 25, 2012 at 9:40 PM, Weiyang Mo <[email protected]> >> wrote: >> > I am sorry it still doesn't work. I checked the code and I think the >> > problems happen in the first few lines where I set IP packet attributes. >> > >> > Here is the complete error message: (It seems there's a problem in >> > ipv4_packet.csum = ipv4_packet.checksum(), even I delete this line, same >> > errors) >> > >> > Traceback (most recent call last): >> > File "./nox/lib/util.py", line 114, in f >> > event.total_len, buffer_id, packet) >> > File "./nox/coreapps/examples/sendIPV4.py", line 89, in >> packet_in_callback >> > self.learn_and_forward(dpid, inport, packet, packet.arr, bufid) >> > File "./nox/coreapps/examples/sendIPV4.py", line 53, in >> learn_and_forward >> > ipv4_packet.csum = ipv4_packet.checksum() >> > File "./nox/lib/packet/ipv4.py", line 162, in checksum >> > self.dstip) >> > error: 'H' format requires 0 <= number <= 65535 >> > Thanks >> > >> > Weiyang >> > 2012/4/25 Aaron Rosen <[email protected]> >> >> >> >> I believe if you do ipstr_to_int("10.0.0.3") it should work. >> >> >> >> Aaron >> >> >> >> >> >> On Wed, Apr 25, 2012 at 6:37 PM, Weiyang Mo <[email protected]> >> >> wrote: >> >> > Hi, >> >> > >> >> > I tested the code and view the packets in Wireshark. For ETH >> packets, >> >> > it >> >> > works. For IPV4, some errors when I complie it. >> >> > >> >> > (1) I tried ETH packets and the host can receive the packets. >> >> > eth_packet= ethernet() >> >> > eth_packet.set_payload(str("hello")) >> >> > eth_packet.dst = packet.dst >> >> > eth_packet.src = packet.src >> >> > eth_packet.type = ethenet.IP_TYPE >> >> > >> >> > self.send_openflow_packet(dpid,eth_packet.tostring(),inport) >> >> > >> >> > (2) I tried IPV4 and this time an error " "H" format requires >> >> > <=number<=65535 " , here's the following code >> >> > >> >> > ipv4_packet = ipv4() >> >> > payload = str("hello") >> >> > ipv4_packet.iplen = ipv4.MIN_LEN + len(payload) >> >> > ipv4_packet.set_payload(payload) >> >> > ipv4_packet.dstip = str("10.0.0.3") >> >> > ipv4_packet.srcip = str("192.168.56.102") >> >> > >> >> > eth_packet= ethernet() >> >> > eth_packet.set_payload(ipv4_packet) >> >> > packet.dst = packet.dst >> >> > eth_packet.src = packet.src >> >> > eth_packet.type = ethenet.IP_TYPE >> >> > ipv4_packet.csum = ipv4_packet.checksum() >> >> > >> >> > self.send_openflow_packet(dpid,ipv4_packet.tostring(),inport) >> >> > >> >> > I guess why it is failed maybe due to such line ipv4_packet.dstip >> >> > = str("10.0.0.3") is not acceptable. Or other reasons? >> >> > >> >> > Thanks very much. >> >> > >> >> > Weiyang >> >> > >> >> > >> >> > >> >> > >> >> > 2012/4/25 Aaron Rosen <[email protected]> >> >> >> >> >> >> Hi Weiyang, >> >> >> >> >> >> You can inject packets from the controller into the switch like >> this. >> >> >> Here is some code that I've used to send UDP packets from the >> >> >> controller to hosts. >> >> >> >> >> >> Aaron >> >> >> >> >> >> def send_udp(mac, dstip, srcip, port, payload): >> >> >> l4 = udp() >> >> >> l4.srcport = port >> >> >> l4.dstport = AGENT_MESSAGE_PORT >> >> >> l4.len = udp.MIN_LEN + len(payload) >> >> >> l4.set_payload(payload) >> >> >> l4.arr = l4.tostring() >> >> >> l3 = ipv4() >> >> >> l3.iplen = ipv4.MIN_LEN + l4.len >> >> >> l3.protocol = ipv4.UDP_PROTOCOL >> >> >> l3.dstip = dstip >> >> >> l3.srcip = srcip >> >> >> l3.set_payload(l4) >> >> >> l2 = ethernet() >> >> >> l2.set_payload(l3) >> >> >> l2.dst = mac >> >> >> l2.src = octstr_to_array(CONTROLLER_MAC) >> >> >> l2.type = ethernet.IP_TYPE >> >> >> l4.csum = l4.checksum() >> >> >> return l2 >> >> >> >> >> >> >> >> >> inform_dest = send_udp(mac, dstip, srcip, port, payload) >> >> >> inst.send_openflow_packet(HA, inform_dest.tostring(), >> >> >> inst.Agent[HA]['inport'], openflow.OFPP_NONE) >> >> >> >> >> >> >> >> >> On Wed, Apr 25, 2012 at 3:02 PM, Weiyang Mo < >> [email protected]> >> >> >> wrote: >> >> >> > Thanks very much for your quick reply. >> >> >> > >> >> >> > But I am still confused. do you mean that "the controller >> instruct a >> >> >> > switch >> >> >> > to send a packet" is not an OpenFlow feature? Or I misunderstand >> what >> >> >> > you >> >> >> > mean. >> >> >> > >> >> >> > I am sending packets from a client to a server through multiple >> >> >> > OpenFlow >> >> >> > switches. I already have this functionality that the controller >> >> >> > inserts >> >> >> > flow-entries and then the packets can be sent to the server. >> >> >> > >> >> >> > Now, I want to have another action that " when the controller >> >> >> > receives >> >> >> > the >> >> >> > first packet-in message, it can instruct a switch to send a packet >> >> >> > which >> >> >> > contains some data(e.g, hello). And this new packet can be sent to >> >> >> > another >> >> >> > host. If so, the host can run other applications automatically >> upon >> >> >> > receving >> >> >> > the packet "hello". >> >> >> > >> >> >> > Is it possible?( Packet in->controller controller-> >> instrucrt >> >> >> > the >> >> >> > switch to create a new packet new packet(Hello) ->host). How >> >> >> > should >> >> >> > I >> >> >> > write the pseudo code. >> >> >> > >> >> >> > Thanks >> >> >> > >> >> >> > Weiyang >> >> >> > >> >> >> > 2012/4/25 Murphy McCauley <[email protected]> >> >> >> >> >> >> >> >> There are no examples of this because this is not an OpenFlow >> >> >> >> feature >> >> >> >> -- >> >> >> >> only the controller can instruct a switch to send a packet. >> >> >> >> >> >> >> >> Unless maybe there is some vendor extension for some switches… >> >> >> >> >> >> >> >> -- Murphy >> >> >> >> >> >> >> >> On Apr 25, 2012, at 11:28 AM, Weiyang Mo wrote: >> >> >> >> >> >> >> >> BTW,any example code for this? For instance, the controller >> wishes >> >> >> >> to >> >> >> >> send >> >> >> >> a packet which contains the data "Hello" through the switch to >> the >> >> >> >> Output. >> >> >> >> >> >> >> >> How should I write the code? Is it like >> >> >> >> "actions=[openflow.ofp_packet_out, >> >> >> >> ...]" ? >> >> >> >> >> >> >> >> I am not clear because I don't find sample codes. Could anyone >> >> >> >> provides a >> >> >> >> simple sample code? >> >> >> >> >> >> >> >> Regards >> >> >> >> >> >> >> >> Weiyang >> >> >> >> ---------- Forwarded message ---------- >> >> >> >> From: Weiyang Mo <[email protected]> >> >> >> >> Date: 2012/4/25 >> >> >> >> Subject: instruct the swtich to create a new packet. >> >> >> >> To: [email protected] >> >> >> >> >> >> >> >> >> >> >> >> Hi,all, >> >> >> >> >> >> >> >> I want to insert an action in to flow entry. The action can tell >> the >> >> >> >> switch to create a new arbitary packet. What command should I >> use? >> >> >> >> >> >> >> >> Thanks a lot >> >> >> >> >> >> >> >> Weiyang >> >> >> >> >> >> >> >> >> >> >> > >> >> >> >> >> >> >> >> >> >> >> >> -- >> >> >> 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 >> > > >
