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)* > > > -- *RegardsSayed Qaiser Ali ShahMSIT-12NUST (SEECS)*