[pox-dev] Defining Dictionary in POX controller
Sayed Qaiser Ali Shah
11msitqshah at seecs.edu.pk
Tue Nov 26 12:26:11 PST 2013
Dear Murphy I tried a lot but I am unable to use the flag properly. Kindly
help me out in the scenario. I want to remove all entries from dictionary
defined after idle_time_out. The pseudocode is as below.
msg.idle_timeout = 10
if msg.idle_timeout== True:
self.macaddrtable=' '
Kindly help me out because I am unable to do this.
On Sun, Nov 24, 2013 at 2:50 AM, Murphy McCauley
<murphy.mccauley at gmail.com>wrote:
> Like the rest of OpenFlow, it's described in the OpenFlow specification:
> http://archive.openflow.org/documents/openflow-spec-v1.0.0.pdf
>
> Also, if you google "OFPFF_SEND_FLOW_REM pox" you should get several
> examples of setting the flag.
>
> In the POX wiki manual, there is some description of the FlowRemoved event
> and of handling events in general.
>
>
> -- Murphy
>
> On Nov 23, 2013, at 10:51 AM, Sayed Qaiser Ali Shah <
> 11msitqshah at seecs.edu.pk> wrote:
>
> I tried to used OFPFF_SEND_FLOW_REM flag and also searched on net but
> didn't get any specific answer. Please tell me how to use this flag? or
> give me a link from which I can get help.
> Thanks
>
>
> On Sat, Nov 23, 2013 at 7:28 PM, Sayed Qaiser Ali Shah <
> 11msitqshah at seecs.edu.pk> wrote:
>
>> I think so. I want to delete entry from dictionary defined on controller.
>> Thanks. I will try this.
>>
>>
>> On Sat, Nov 23, 2013 at 11:04 AM, Murphy McCauley <
>> murphy.mccauley at gmail.com> wrote:
>>
>>>
>>> On Nov 22, 2013, at 12:57 PM, Sayed Qaiser Ali Shah <
>>> 11msitqshah at seecs.edu.pk> wrote:
>>>
>>> Hello Murphy McCauley,
>>>
>>> I solved the duplication problem now I want to refresh the dictionary I
>>> have defined after an idle_timeout. I want to set idle_timeout to 10. I
>>> tried this but didn't get what I wanted.
>>>
>>> msg.idle_timeout = 10
>>> if msg.idle_timeout== True:
>>> self.macaddrtable=' '
>>>
>>> This will destroy all entries in dictionary. Is there any other way so
>>> that only that entry whose idle_timeout has expired is removed and then
>>> rearrange remaining entries in dictionary.
>>> Just as a reminder. macaddrtable is dictionary defined which contains
>>> source and destination mac addresses. When a packet arrives controller its
>>> entry is saved in the dictionary macaddrtable.
>>>
>>>
>>> If you set the OFPFF_SEND_FLOW_REM flag when installing the table entry,
>>> you'll get a FlowRemoved event when it expires. Maybe that's what you need?
>>>
>>> -- Murphy
>>>
>>> On Fri, Nov 15, 2013 at 6:05 PM, Sayed Qaiser Ali Shah <
>>> 11msitqshah at seecs.edu.pk> wrote:
>>>
>>>> Ok thank you I will check it out.
>>>>
>>>>
>>>> On Fri, Nov 15, 2013 at 5:54 PM, Murphy McCauley <
>>>> murphy.mccauley at gmail.com> wrote:
>>>>
>>>>> I'm just suggesting you work backwards to find the problem. Use
>>>>> Wireshark to monitor the traffic to help determine where the duplicates are
>>>>> coming from. If they're coming from a switch, I suggest you inspect the
>>>>> table on that switch to see which table entry the switch. Then analyze the
>>>>> OpenFlow traffic to that switch to find the OpenFlow messages which
>>>>> installed the problematic entries. Then analyze your controller code to
>>>>> see where you sent those problematic entries.
>>>>> -- Murphy
>>>>>
>>>>>
>>>>> On Nov 15, 2013, at 4:49 AM, Sayed Qaiser Ali Shah <
>>>>> 11msitqshah at seecs.edu.pk> wrote:
>>>>>
>>>>> Thank you so much. Yes you are right about what you said but is there
>>>>> is any other way, so that I can do this. I can read individual entries
>>>>> statically but the problem is I want to get it dynamic.
>>>>> Like I can print individual entries by using:
>>>>>
>>>>> print self.macaddrtable[1]
>>>>> print self.macaddrtable[2]
>>>>> print self.macaddrtable[3]
>>>>> print self.macaddrtable[4]
>>>>>
>>>>> To get desired result dynamically I used loop. But you know what I
>>>>> got. :(
>>>>>
>>>>>
>>>>> On Fri, Nov 15, 2013 at 3:36 PM, Murphy McCauley <
>>>>> murphy.mccauley at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>> On Nov 15, 2013, at 2:20 AM, Sayed Qaiser Ali Shah <
>>>>>> 11msitqshah at seecs.edu.pk> wrote:
>>>>>>
>>>>>> Hello Murphy actually I am working on Traffic Engineering. I am now
>>>>>> learning that how to forward traffic when we have dictionary on controller.
>>>>>> I want to forward some entries of dictionary via queue-1 and some entries
>>>>>> via queue-2. For this I have created dictionary and it created successfully
>>>>>> with you help. Those entries of dictionary contain Source Mac Address and
>>>>>> Destination Mac address. I created 2 queues on Interface 1 of switch. I
>>>>>> then Pinged host 2 from host 1 and host 1 from host 3. It inserted four
>>>>>> entries in dictionary created on controller. Entries in Dictionary are
>>>>>> {1: (EthAddr('00:00:00:00:00:02'), EthAddr('00:00:00:00:00:01')),
>>>>>> 2: (EthAddr('00:00:00:00:00:01'), EthAddr('00:00:00:00:00:02')),
>>>>>> 3: (EthAddr('00:00:00:00:00:01'), EthAddr('00:00:00:00:00:03')),
>>>>>> 4: (EthAddr('00:00:00:00:00:03'), EthAddr('00:00:00:00:00:01')) }
>>>>>> Dear Murphy you asked earlier that you didn't get what I wanted to
>>>>>> do. I think that I am just explaining it in easy way that I just want to
>>>>>> forward two entries of dictionary via queue-1 and other 2 entries of
>>>>>> dictionary via queue-2. I am just doing practice on different techniques of
>>>>>> Traffic Engineering. I used the following code for forwarding traffic via
>>>>>> queues:
>>>>>>
>>>>>> if self.macaddrtable=='': //When we have no entry in
>>>>>> macaddrtable dictionary
>>>>>> queue=1
>>>>>> msg.actions.append(of.ofp_action_enqueue(port = port,
>>>>>> queue_id = queue))
>>>>>> else:
>>>>>> for a in self.macaddrtable:
>>>>>> if a<=2:
>>>>>> queue=1
>>>>>> msg.actions.append(of.ofp_action_enqueue(port = port,
>>>>>> queue_id = queue))
>>>>>> elif a>2:
>>>>>> queue=2
>>>>>> msg.actions.append(of.ofp_action_enqueue(port = port,
>>>>>> queue_id = queue))
>>>>>>
>>>>>> The code worked fine and forwarded traffic via desired queues but
>>>>>> after about 10 seconds of pinging, duplicate packets were detected. I don't
>>>>>> know why duplicate packets were detected. Can you please tell the reason?
>>>>>>
>>>>>>
>>>>>> My best guesses are that you are somehow creating a flow entry with
>>>>>> multiple actions or a loop, but it's hard to say. I'd suggest that you try
>>>>>> to use Wireshark or a similar tool to figure out where the duplicates are
>>>>>> coming from. You should see the duplicates at the port of the destination
>>>>>> host and the egress port of the last switch. Work backwards from there.
>>>>>> If you find the source of the duplications is a switch, examine the flow
>>>>>> table of that switch and see if you can spot the reason.
>>>>>>
>>>>>> -- Murphy
>>>>>>
>>>>>> On Tue, Nov 12, 2013 at 2:00 AM, Murphy McCauley <
>>>>>> murphy.mccauley at gmail.com> wrote:
>>>>>>
>>>>>>> It's still hard for me to answer questions since I still don't know
>>>>>>> what you're really trying to accomplish here.
>>>>>>>
>>>>>>> If you want entries to time out on the switch, set timeouts when
>>>>>>> installing the table entry (sending the flow_mod). If you want
>>>>>>> notifications when flows are removed on the switch, that's also an option
>>>>>>> you can set when installing the entry; then listen to the FlowRemoved event
>>>>>>> to tell when it has actually happened.
>>>>>>>
>>>>>>> I'm not sure what you mean by "exact mac". Your code records the
>>>>>>> address the packets were sent to. If they were sent to the broadcast
>>>>>>> address, then... that's the destination.
>>>>>>>
>>>>>>> -- Murphy
>>>>>>>
>>>>>>> On Nov 11, 2013, at 9:42 AM, Sayed Qaiser Ali Shah <
>>>>>>> 11msitqshah at seecs.edu.pk> wrote:
>>>>>>>
>>>>>>> Thank you so much Murphy for your help. I did it the way you
>>>>>>> explained. But how can I refresh entries in the table. i.e. how to set idle
>>>>>>> timeout and hard timeout for this so that the table can be refreshed or how
>>>>>>> the entries can be updated when a flow is removed from flow table on Switch.
>>>>>>> Another Problem is:
>>>>>>> The code is as below.
>>>>>>>
>>>>>>> if (packet.src,packet.dst) not in self.macaddrs and
>>>>>>> (packet.dst,packet.src) not in self.macaddrs:
>>>>>>> self.macaddrs.add((packet.src,packet.dst))
>>>>>>> self.macaddrtable[f_id]=(packet.src,packet.dst)
>>>>>>> f_id=f_id+1
>>>>>>> print "Mac Table is "
>>>>>>> print self.macaddrtable
>>>>>>>
>>>>>>> When I created a topology with 3 hosts the following result was shown
>>>>>>>
>>>>>>> Mac Table is
>>>>>>> {1: (EthAddr('00:00:00:00:00:01'), EthAddr('ff:ff:ff:ff:ff:ff')), 2:
>>>>>>> (EthAddr('00:00:00:00:00:02'), EthAddr('00:00:00:00:00:01')), 3:
>>>>>>> (EthAddr('00:00:00:00:00:03'), EthAddr('00:00:00:00:00:01')), 4:
>>>>>>> (EthAddr('00:00:00:00:00:02'), EthAddr('ff:ff:ff:ff:ff:ff')), 5:
>>>>>>> (EthAddr('00:00:00:00:00:03'), EthAddr('00:00:00:00:00:02'))}
>>>>>>>
>>>>>>> The result I expected is little bit different in terms of broadcast
>>>>>>> address. Like in 1 destination mac is ff:ff:ff:ff:ff:ff but I was expecting
>>>>>>> 00:00:00:00:00:02 and similar is the case with some other entries as well.
>>>>>>> Is there any way so that I can get desired exact mac, not broadcast?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Nov 10, 2013 at 5:00 AM, Murphy McCauley <
>>>>>>> murphy.mccauley at gmail.com> wrote:
>>>>>>>
>>>>>>>> It sounds like you need to record them as a pair to get what you
>>>>>>>> want, so ... put them in as a pair.
>>>>>>>>
>>>>>>>> It looks like I may have been responsible for the problem you were
>>>>>>>> seeing -- a little typo inserted an errant right square bracket. Try:
>>>>>>>> self.macaddrs.add((packet.src,packet.dst))
>>>>>>>>
>>>>>>>> It's still not clear from context whether ordering matters to you
>>>>>>>> (is A sending to B the same as B sending to A?). If it isn't, you might
>>>>>>>> want to sort the two addresses or just check for both...
>>>>>>>>
>>>>>>>> if (packet.src,packet.dst) not in self.macaddrs and
>>>>>>>> (packet.dst,packet.src) not in self.macaddrs:
>>>>>>>>
>>>>>>>> -- Murphy
>>>>>>>>
>>>>>>>> On Nov 9, 2013, at 3:32 PM, Sayed Qaiser Ali Shah <
>>>>>>>> 11msitqshah at seecs.edu.pk> wrote:
>>>>>>>>
>>>>>>>> Thank you so much Murphy. I tried it but got little problem in add
>>>>>>>> function i.e. when I used
>>>>>>>> self.macaddrs.add((packet.src,packet.dst])) it generated error in
>>>>>>>> this function then I tried
>>>>>>>> self.macaddrs.add(packet.src,packet.dst)
>>>>>>>> It also generated an error that add must have 1 argument where as 2
>>>>>>>> given. Then I tried
>>>>>>>>
>>>>>>>> if (packet.src,packet.dst) not in self.macaddrs:
>>>>>>>> self.macaddrs.add(packet.src)
>>>>>>>> self.macaddrs.add(packet.dst)
>>>>>>>> self.macaddrtable[f_id]=(packet.src,packet.dst)
>>>>>>>> f_id=f_id+1
>>>>>>>>
>>>>>>>> It didn't generate an error and I didn't get any repeated result
>>>>>>>> but there was some problem in the code I got results as below.
>>>>>>>> When I ping host1 from host 2 it added record in dictionary. Then I
>>>>>>>> ping host 3 from h1 record was inserted again but the problem was, as
>>>>>>>> record of host 1, host 2 and host 3 was saved in macaddrs and two records
>>>>>>>> were there but when I pinged the hosts present in macaddrs i.e. 1, 2, 3
>>>>>>>> like I ping host 2 from h3 as record was not present in macaddrtable still
>>>>>>>> record was not added to dictionary. It is because addresses are saving in
>>>>>>>> macaddrs one by one individually i.e. first source and then destination
>>>>>>>> address. When packet arrives controller it checks for source and
>>>>>>>> destination address in macaddrs as when there are individual record of each
>>>>>>>> host it then doesn't execute IF body because source and destination
>>>>>>>> addresses are already there as individual address. What to do with this????
>>>>>>>> Kindly help.
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sun, Nov 10, 2013 at 3:26 AM, Murphy McCauley <
>>>>>>>> murphy.mccauley at gmail.com> wrote:
>>>>>>>>
>>>>>>>>> One possible answer is that you should keep a set of the ones
>>>>>>>>> you've added so far...
>>>>>>>>> self.macaddrtable = {}
>>>>>>>>> self.macaddrs = set()
>>>>>>>>>
>>>>>>>>> ...
>>>>>>>>>
>>>>>>>>> if (packet.src,packet.dst) not in self.macaddrs:
>>>>>>>>> self.macaddrs.add((packet.src,packet.dst]))
>>>>>>>>> self.macaddrtable[f_id]=(packet.src,packet.dst)
>>>>>>>>> f_id=f_id+1
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> There might be better things to be done, but it's impossible to
>>>>>>>>> say without knowing more (e.g., what you're trying to accomplish, what f_id
>>>>>>>>> is used for, etc.).
>>>>>>>>>
>>>>>>>>> -- Murphy
>>>>>>>>>
>>>>>>>>> On Nov 9, 2013, at 10:35 AM, Sayed Qaiser Ali Shah <
>>>>>>>>> 11msitqshah at seecs.edu.pk> wrote:
>>>>>>>>>
>>>>>>>>> > Hello everybody,
>>>>>>>>> >
>>>>>>>>> > I have defined dictionary in POX controller and I by the name
>>>>>>>>> addrtable and I am saving two things in this dictionary i.e. Source mac and
>>>>>>>>> destination mac. What I have done is
>>>>>>>>> >
>>>>>>>>> > self.macaddrtable = {}
>>>>>>>>> > ...
>>>>>>>>> > f_id=1
>>>>>>>>> > self.macaddrtable[f_id]={packet.src, packet.dst}
>>>>>>>>> > print self.macaddrtable
>>>>>>>>> > f_id=f_id+1
>>>>>>>>> >
>>>>>>>>> > It is saving source mac and destination mac in the dictionary
>>>>>>>>> but the problem is when f_id increases it then save same source and
>>>>>>>>> destination mac again and again.
>>>>>>>>> > What I want is to save mac address only if its not in dictionary.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> *Regards Sayed Qaiser Ali ShahMSIT-12 NUST (SEECS)*
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *Regards Sayed Qaiser Ali ShahMSIT-12 NUST (SEECS)*
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *Regards Sayed Qaiser Ali ShahMSIT-12 NUST (SEECS)*
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> *Regards Sayed Qaiser Ali ShahMSIT-12 NUST (SEECS)*
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>>
>>>>
>>>>
>>>> *Regards Sayed Qaiser Ali ShahMSIT-12 NUST (SEECS)*
>>>>
>>>
>>>
>>>
>>> --
>>>
>>>
>>>
>>>
>>> *Regards Sayed Qaiser Ali ShahMSIT-12 NUST (SEECS)*
>>>
>>>
>>>
>>
>>
>> --
>>
>>
>>
>>
>> *Regards Sayed Qaiser Ali ShahMSIT-12 NUST (SEECS)*
>>
>
>
>
> --
>
>
>
>
> *Regards Sayed Qaiser Ali ShahMSIT-12 NUST (SEECS)*
>
>
>
--
*RegardsSayed Qaiser Ali ShahMSIT-12NUST (SEECS)*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.noxrepo.org/pipermail/pox-dev-noxrepo.org/attachments/20131127/f8a2bd54/attachment-0002.htm>
More information about the pox-dev
mailing list