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)

Reply via email to