> On Wed, 27 Nov 2013 09:54:12 +0900 (JST)
> [email protected] (YAMAMOTO Takashi) wrote:
> 
>>> On Wed, 27 Nov 2013 09:19:14 +0900 (JST)
>>> [email protected] (YAMAMOTO Takashi) wrote:
>>> 
>>>>> sysfs is architecture independent.
>>>>> 
>>>>> Signed-off-by: FUJITA Tomonori <[email protected]>
>>>>> ---
>>>>>  ryu/services/protocols/vrrp/monitor_linux.py | 40 
>>>>> +++-------------------------
>>>>>  1 file changed, 4 insertions(+), 36 deletions(-)
>>>>> 
>>>>> diff --git a/ryu/services/protocols/vrrp/monitor_linux.py 
>>>>> b/ryu/services/protocols/vrrp/monitor_linux.py
>>>>> index f1b5efb..2c3569e 100644
>>>>> --- a/ryu/services/protocols/vrrp/monitor_linux.py
>>>>> +++ b/ryu/services/protocols/vrrp/monitor_linux.py
>>>>> @@ -14,12 +14,7 @@
>>>>>  # See the License for the specific language governing permissions and
>>>>>  # limitations under the License.
>>>>>  
>>>>> -# tested on 64bit linux.
>>>>> -# On other platform like 32bit Linux, the structure can be different
>>>>> -# due to alignment difference.
>>>> 
>>>> have you taken a look at _join_vrrp_group?
>>> 
>>> The structures used in the function is defined in RFC and are aligned
>>> properly in every architectures?
>> 
>> they look so.  if they are, please add a comment.
> 
> Ok, how about the following?

looks good to me.  thanks.

YAMAMOTO Takashi

> 
>>From 872926964e22e7b3de1aee92b74ecaee7b92b404 Mon Sep 17 00:00:00 2001
> From: FUJITA Tomonori <[email protected]>
> Date: Tue, 26 Nov 2013 17:23:22 -0800
> Subject: [PATCH v2] vrrp: use sysfs instead of ioctl to get ifindex
> 
> sysfs is architecture independent.
> 
> Signed-off-by: FUJITA Tomonori <[email protected]>
> ---
>  ryu/services/protocols/vrrp/monitor_linux.py | 48 
> +++++++---------------------
>  1 file changed, 12 insertions(+), 36 deletions(-)
> 
> diff --git a/ryu/services/protocols/vrrp/monitor_linux.py 
> b/ryu/services/protocols/vrrp/monitor_linux.py
> index f1b5efb..a1226e9 100644
> --- a/ryu/services/protocols/vrrp/monitor_linux.py
> +++ b/ryu/services/protocols/vrrp/monitor_linux.py
> @@ -14,12 +14,7 @@
>  # See the License for the specific language governing permissions and
>  # limitations under the License.
>  
> -# tested on 64bit linux.
> -# On other platform like 32bit Linux, the structure can be different
> -# due to alignment difference.
> -
>  import contextlib
> -import fcntl
>  import socket
>  import struct
>  
> @@ -36,9 +31,7 @@ from ryu.services.protocols.vrrp import utils
>  
>  
>  # Those are not defined in socket module
> -IFNAMSIZ = 16
>  SS_MAXSIZE = 128
> -SIOCGIFINDEX = 0x8933   # This is for Linux x64. May differ on other Linux
>  MCAST_JOIN_GROUP = 42
>  MCAST_LEAVE_GROUP = 45
>  PACKET_ADD_MEMBERSHIP = 1
> @@ -48,35 +41,10 @@ SOL_PACKET = 263
>  
>  
>  def if_nametoindex(ifname):
> -    # can the one defined in libc.so be used?
> -    #
> -    # IFNAMSIZE = 16
> -    # struct ifreq {
> -    #     char ifr_name[IFNAMSIZ]; /* Interface name */
> -    #     union {
> -    #         struct sockaddr ifr_addr;
> -    #         struct sockaddr ifr_dstaddr;
> -    #         struct sockaddr ifr_broadaddr;
> -    #         struct sockaddr ifr_netmask;
> -    #         struct sockaddr ifr_hwaddr;
> -    #         short           ifr_flags;
> -    #         int             ifr_ifindex;
> -    #         int             ifr_metric;
> -    #         int             ifr_mtu;
> -    #         struct ifmap    ifr_map;
> -    #         char            ifr_slave[IFNAMSIZ];
> -    #         char            ifr_newname[IFNAMSIZ];
> -    #         char           *ifr_data;
> -    #     };
> -    # };
> -    PACK_STR = '16sI12x'
> -
> -    # get ip address of the given interface
> -    with contextlib.closing(socket.socket(socket.AF_INET,
> -                                          socket.SOCK_DGRAM, 0)) as 
> udp_socket:
> -        ifreq = struct.pack(PACK_STR, ifname, 0)
> -        res = fcntl.ioctl(udp_socket, SIOCGIFINDEX, ifreq)
> -        return struct.unpack(PACK_STR, res)[1]
> +    filename = '/sys/class/net/' + ifname + '/ifindex'
> +    with contextlib.closing(open(filename)) as f:
> +        for line in f:
> +            return int(line)
>  
>  
>  @monitor.VRRPInterfaceMonitor.register(vrrp_event.VRRPInterfaceNetworkDevice)
> @@ -132,6 +100,8 @@ class 
> VRRPInterfaceMonitorNetworkDevice(monitor.VRRPInterfaceMonitor):
>          self.__is_active = False
>          super(VRRPInterfaceMonitorNetworkDevice, self).stop()
>  
> +    # we assume that the structures in the following two functions for
> +    # multicast are aligned in the same way on all the archtectures.
>      def _join_multicast_membership(self, join_leave):
>          config = self.config
>          if config.is_ipv6:
> @@ -142,6 +112,12 @@ class 
> VRRPInterfaceMonitorNetworkDevice(monitor.VRRPInterfaceMonitor):
>              add_drop = PACKET_ADD_MEMBERSHIP
>          else:
>              add_drop = PACKET_DROP_MEMBERSHIP
> +        # struct packet_mreq {
> +        #     int mr_ifindex;
> +        #     unsigned short mr_type;
> +        #     unsigned short mr_alen;
> +        #     unsigned char  mr_mr_address[8];
> +        # };
>          packet_mreq = struct.pack('IHH8s', self.ifindex,
>                                    PACKET_MR_MULTICAST, 6,
>                                    addrconv.mac.text_to_bin(mac_address))
> -- 
> 1.8.3.4 (Apple Git-47)
> 
> 
> ------------------------------------------------------------------------------
> Rapidly troubleshoot problems before they affect your business. Most IT 
> organizations don't have a clear picture of how application performance 
> affects their revenue. With AppDynamics, you get 100% visibility into your 
> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to