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 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) >> >> >> >> -- >> 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)