Thanks for your reply. Is there anyway that dpid is taken automatically not to be entered manually??
On Sun, Apr 14, 2013 at 4:00 AM, Murphy McCauley <murphy.mccau...@gmail.com>wrote: > The event object also has a .dpid attribute which you can use to > distinguish between switches -- each switch has a different DPID. > > So you'll want to do something along the lines of... > > if event.dpid == <DPID of switch 1>: > if packet.find('tcp'): > action = of.ofp_action_enqueue(port = port, queue_id = 3) > ... > elif event.dpid == <DPID of switch 2>: > if packet.find('tcp'): > action = of.ofp_action_enqueue(port = port, queue_id = 2) # different > queue on this switch > ... > else: > # This switch doesn't have any queues -- just use output > action = of.ofp_action_output(port = port) > ... > msg.actions.append(action) > > > Hope that helps. > > -- Murphy > > On Apr 13, 2013, at 3:19 PM, Sayed Qaiser Ali Shah Shah wrote: > > First of all I created two queues i.e. queue-0 and queue-1 on PORT Eth-1 > of OVS. I use the code below on cotroller > if packet.find('tcp'): > queue=1 > elif packet.find('arp'): > queue=0 > else: > queue=1 > msg = of.ofp_flow_mod() > msg.match = of.ofp_match.from_packet(packet, event.port) > msg.idle_timeout = 10 > msg.hard_timeout = 30 > msg.actions.append(of.ofp_action_enqueue(port = port, queue_id = > queue)) > msg.data = event.ofp # 6a > self.connection.send(msg) > When I use the mininet command "iperf h1 h2" it worked fine and showed > less bandwidth because I allocated less bandwidth to queues. But when I > iperf host-2 and host-3 "iperf h2 h3" as the traffic doesn't pass via eth-1 > the bandwidth was expected to be high which is by default, but it showed > much less bandwidth than "iperf h1 h2". This is because as when traffic was > checked and matched it assigns 1 to queue i.e. queue=1 and as there is not > such queue available on port h2 or h3 it showed wrong result. How to make > it work correctly i.e. if queues are not created on an interface then > queues should not be checked and should not be assigned to traffic. > > On Fri, Apr 5, 2013 at 1:42 PM, Sayed Qaiser Ali Shah Shah < > 11msitqs...@seecs.edu.pk> wrote: > >> Thanks a lot. In fact I want the same thing which you mentioned and I was >> after this since last one month. I am using OVS switch. I will try this. >> This is of great help for me. >> >> >> On Fri, Apr 5, 2013 at 1:18 PM, Murphy McCauley < >> murphy.mccau...@gmail.com> wrote: >> >>> Yes, you can do this if what you want can be accomplished using the >>> queue types available in your switch. If that condition is true, then >>> there are several ways to do it with different tradeoffs. I'd suggest that >>> you start off by modifying the l2_learning component to assign each new >>> flow to the appropriate queue based on your criteria (e.g., protocol >>> number). To do this you: >>> >>> 1) Configure queues on your switch. How you do this is switch-specific >>> and not part of OpenFlow. There's an article on how to configure some >>> queues in Open vSwitch here (or read the OVS documentation for more): >>> http://openvswitch.org/support/config-cookbooks/qos-rate-limiting/ >>> >>> If you're not using OVS, you'll have to consult your switch's >>> documentation. >>> >>> When you set up the queues, each of them will have an integer ID. You >>> can use the OpenFlow enqueue action to direct traffic to these queues. >>> >>> 2) Modify l2_learning's flow installation. Starting around line 169 in >>> l2_learning.py, it creates new flow entries with an ofp_action_output >>> action. You'd change this in two ways. First, you'd decide which queue >>> you wanted by inspecting the packet. This is available in the .parsed >>> attribute of the PacketIn event object, as I mentioned earlier. For >>> example, an easy way to determine if the packet is ipv4 is just "if >>> event.parsed.find('ipv4'): ...". Once you determine which queue to assign >>> to, use the ofp_action_enqueue action instead of ofp_action_output. >>> Altogether, this makes the modified code look something like this: >>> >>> log.debug("installing flow for %s.%i -> %s.%i" % >>> (packet.src, event.port, packet.dst, port)) >>> >>> if packet.find('tcp'): >>> queue = 1 # TCP goes to queue 1 >>> elif packet.find('ipv4'): >>> queue = 2 # IP that isn't TCP goes to queue 2 >>> else: >>> queue = 3 # All other traffic goes to queue 3 >>> >>> msg = of.ofp_flow_mod() >>> msg.match = of.ofp_match.from_packet(packet, event.port) >>> msg.idle_timeout = 10 >>> msg.hard_timeout = 30 >>> msg.actions.append(of.ofp_action_enqueue(port = port, queue_id = queue)) >>> msg.data = event.ofp # 6a >>> self.connection.send(msg) >>> >>> >>> Hope that helps. >>> >>> -- Murphy >>> >>> On Apr 5, 2013, at 12:58 AM, Sayed Qaiser Ali Shah Shah wrote: >>> >>> I think you mean that I want to achieve from this. I want to get IP >>> protocol number from packet and then on the basis of that protocol number I >>> want to assign bandwidth to flows/hosts on the basis of their needs. Like >>> the protocol number which needs high bandwidth should be allocated high >>> bandwidth or the one which needs less bandwidth should be allocated less >>> bandwidth so, that bandwidth doesn't waste. I am doing this for end user >>> satisfaction. This is related to QoS. >>> Am I on Right direction? Can I do this? >>> >>> On Fri, Apr 5, 2013 at 5:36 AM, Murphy McCauley < >>> murphy.mccau...@gmail.com> wrote: >>> >>>> On Apr 4, 2013, at 4:08 PM, Sayed Qaiser Ali Shah Shah wrote: >>>> >>>> The link which you provide was very helpful and I found match class in >>>> that and I use this code >>>> >>>> import pox.openflow.libopenflow_01 as of # POX convention >>>> import pox.lib.packet as pkt # POX convention >>>> my_match = of.ofp_match(dl_type = pkt.ethernet.IP_TYPE, nw_proto = >>>> pkt.ipv4.TCP_PROTOCOL, >>>> tp_dst = 80) >>>> >>>> Which will create match to web servers but I don't know how this will >>>> work. Will it work automatically i.e. it will forward packets to server >>>> automatically when any packet having nw_proto=TCP_Protocol and tp_dst=80. >>>> If it does not forward the packet automatically then how it works? >>>> >>>> >>>> You still haven't really explained what it is that you're trying to do. >>>> What is your high-level goal? Are you trying to install flow table >>>> entries? Do you want packets from particular flows sent to the controller? >>>> Are you trying to block certain connections? >>>> >>>> If you're trying to install flow entries on the switch, you need to >>>> send an ofp_flow_mod (as per the OpenFlow spec). This contains a match >>>> object and then contains actions to tell the switch what to do with it >>>> (send it out of a port, send it to the controller, etc.). See the section >>>> of the manual wiki on ofp_flow_mod, as well as the examples in the >>>> forwarding directory of POX (for example, l2_learning). >>>> >>>> -- Murphy >>>> >>> >>> >>> >>> -- >>> *Regards >>> >>> Sayed Qaiser Ali Shah >>> MSIT-12 >>> NUST (SEECS)* >>> >>> >>> >> >> >> -- >> *Regards >> >> Sayed Qaiser Ali Shah >> MSIT-12 >> NUST (SEECS)* >> > > > > -- > *Regards > > Sayed Qaiser Ali Shah > MSIT-12 > NUST (SEECS)* > > > -- *Regards Sayed Qaiser Ali Shah MSIT-12 NUST (SEECS)*