Hey Lucas,

Thanks for the help. I was able to send icmp packets to mininet host using
the code below.
I used arbitrary source mac address and source ip. The destination ip and
destination mac address is the values of
the mininet host connected in port 1 of the switch.

However I was not able to get the icmp reply from the host.Could you please
check what the probem is.

from pox.core import core
import pox.openflow.libopenflow_01 as of
import pox.lib.packet as pkt
from pox.lib.addresses import EthAddr,IPAddr

log= core.getLogger()

class Icmp(object):
        def __init__(self):
                core.openflow.addListeners(self)

        def _handle_PacketIn(self,event):
                packet=event.parsed


                if packet.find("icmp"):
                        log.debug("Icmp message received")

        def _handle_ConnectionUp(self,event):

                #This part is the ping reply
                icmp=pkt.icmp()
                icmp.type=pkt.TYPE_ECHO_REQUEST
                echo=pkt.ICMP.echo(payload="0123456789")
                icmp.payload= echo
                log.debug("This is the icmp payload %s"%icmp.payload)

                #Create IP payload
                ipp = pkt.ipv4()
                ipp.protocol=ipp.ICMP_PROTOCOL
                ipp.srcip=IPAddr("10.0.0.10")
                ipp.dstip=IPAddr("10.0.0.1")
                ipp.payload=icmp
                log.debug( "This is the ip payload %s"%ipp.payload)

                #Create Ethernet Payload
                e= pkt.ethernet()
                e.src=EthAddr("00:00:00:00:00:10")
                e.dst=EthAddr("00:00:00:00:00:01")
                e.type=e.IP_TYPE
                e.payload=ipp
                log.debug( "This is the ethernet payload %s"%e.payload)

                #Send it to first input port
                msg = of.ofp_packet_out()
                msg.actions.append(of.ofp_action_output(port=1))
                msg.date=e.pack()
                msg.in_port=of.OFPP_NONE
                event.connection.send(msg)

def launch():

        def start_switch(event):
                log.debug("Controlling %s"%(event.connection))
                Icmp()
        core.openflow.addListenerByName("ConnectionUp",start_switch)


Thanks,
Sandesh Shrestha
www.sandeshshrestha.blogspot.com

On Thu, Feb 26, 2015 at 6:17 AM, Lucas Brasilino <lr...@cin.ufpe.br> wrote:

> Hi Sadesh,
>
> I think you can construct a ICMP request as below. I did use python
> interactively just as example.
> The ethernet packet object 'eth' must be sent by using openflow's
> ofp_packet_out() (method) message along
> with ofp_action_output() (method) action to inform switch which output
> port the packet must be sent from.
> python was started from pox installation directory.
>
> >>> import pox.lib.packet as pkt
> >>> from pox.lib.addresses import IPAddr,EthAddr
> >>> echo = pkt.ICMP.echo(payload="0123456789")
> >>> icmp = pkt.icmp(type=pkt.ICMP.TYPE_ECHO_REQUEST,payload=echo)
> >>> ip =
> pkt.ipv4(srcip=IPAddr("10.0.0.1"),dstip=("10.0.0.2"),protocol=pkt.ipv4.ICMP_PROTOCOL,payload=icmp)
> >>> eth =
> pkt.ethernet(src=EthAddr("aa:bb:cc:dd:ee:fe"),dst=EthAddr("aa:bb:cc:dd:ee:ff"),type=pkt.ethernet.IP_TYPE,payload=ip)
> >>> print eth
> [aa:bb:cc:dd:ee:fe>aa:bb:cc:dd:ee:ff IP]
> >>> print eth.payload
> [IP+ICMP 10.0.0.1>10.0.0.2 (cs:00 v:4 hl:5 l:20 t:64)]
> >>> print eth.payload.payload
> [t:ECHO_REQUEST c:0 chk:0][ICMP id:25863 seq:0]
>
>
> I didn't test myself now but it should work :)
> Hope it helps
>
> --
> Att
> Lucas Brasilino
> MSc Student @ Federal University of Pernambuco (UFPE) / Brazil
> twitter: @lucas_brasilino
>
>
> 2015-02-26 0:03 GMT-03:00 Sandesh Shrestha <sande...@ualberta.ca>:
>
> Dear All,
>>
>> I want to create an ICMP request(not reply) packet in POX. How can I do
>> that?Especially what will be the icmp payload and source ip and mac address
>> so that I get reply from the mininet host.
>>
>>
>> Thanks,
>> Sandesh Shrestha
>> www.sandeshshrestha.blogspot.com
>>
>>
>>
>
>
>
>

Reply via email to