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.mccau...@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 < > 11msitqs...@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 < > 11msitqs...@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.mccau...@gmail.com> wrote: >> >>> >>> On Nov 22, 2013, at 12:57 PM, Sayed Qaiser Ali Shah < >>> 11msitqs...@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 < >>> 11msitqs...@seecs.edu.pk> wrote: >>> >>>> Ok thank you I will check it out. >>>> >>>> >>>> On Fri, Nov 15, 2013 at 5:54 PM, Murphy McCauley < >>>> murphy.mccau...@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 < >>>>> 11msitqs...@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.mccau...@gmail.com> wrote: >>>>> >>>>>> >>>>>> On Nov 15, 2013, at 2:20 AM, Sayed Qaiser Ali Shah < >>>>>> 11msitqs...@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.mccau...@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 < >>>>>>> 11msitqs...@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.mccau...@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 < >>>>>>>> 11msitqs...@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.mccau...@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 < >>>>>>>>> 11msitqs...@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)*