Thanks Murphy McCauley I will try this. :)

On Sun, Apr 14, 2013 at 4:28 AM, Murphy McCauley
<[email protected]>wrote:

> Queue configuration is external to OpenFlow, so it seems to me that you
> can't expect the controller to magically know which queues to use for what
> on which switches.
>
> The first thing that seems reasonable to me is to set the DPIDs for the
> switches to known values when configuring them -- at the same time as you
> set up the queues.
>
> If you don't want to do that, but can identify the different switches
> based on their model or whatever, you could theoretically look at their
> features responses and figure out which DPID goes with which switch, but
> this just seems like a complicated way of doing the above.
>
> You could also try sending an ofp_queue_get_config_request or
> ofp_queue_stats_request to each switch after it connects to try to figure
> out how many/which queues it has.  This seems like a questionable approach
> to me in general, but maybe it's what you need.
>
> -- Murphy
>
> On Apr 13, 2013, at 4:12 PM, Sayed Qaiser Ali Shah Shah wrote:
>
> 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 <
> [email protected]> 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 <
>> [email protected]> 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 <
>>> [email protected]> 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 <
>>>> [email protected]> 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)*
>
>
>


-- 
*Regards

Sayed Qaiser Ali Shah
MSIT-12
NUST (SEECS)*

Reply via email to