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)

Reply via email to