Issue with socket communication when specifying IP Alias

Ben Dart Ben.Dart at adept.com
Thu Jun 9 23:28:05 UTC 2016


As some additional information, I have been playing around with the SIOSIFFLAGS flag. I see that the implementation of rtems_bsdnet_ifconfig is really simple and just calls ioctl. I noticed that if you do this:

Short ifFlags = 0;

returnCode = rtems_bsdnet_ifconfig(eth_interface, SIOCGIFFLAGS, &ifFlags);
 if (returnCode < 0) return returnCode;

 returnCode = rtems_bsdnet_ifconfig(eth_interface, SIOCSIFFLAGS, &ifFlags);
 if (returnCode < 0) return returnCode;

which is just getting and setting the same flags, then the device cannot be contacted (no ping, nothing). I tried this after looking at this question on SO: http://stackoverflow.com/questions/5308090/set-ip-address-using-siocsifaddr-ioctl which indicates that you should set IFF_UP and IFF_RUNNING.

-----Original Message-----
From: users [mailto:users-bounces at rtems.org] On Behalf Of Ben Dart
Sent: Thursday, June 09, 2016 10:25 AM
To: Chris Johns; users at rtems.org
Subject: RE: Issue with socket communication when specifying IP Alias


We get the following information from netstat and ifconfig, as far as I can tell there is no significant difference:
___________________________________________________________________________
Broken system with setup using rtems_bsdnet_ifconfig socket bind fails

NETSTATS
Destination     Gateway/Mask/Hw    Flags     Refs     Use Expire Interface
default         172.17.0.1         UGS         2        2      0 eth1
127.0.0.1       127.0.0.1          UH          0        0      0 lo0
172.17.0.0      255.255.0.0        U           0        0     16 eth1
172.17.0.1      00:23:05:61:93:4F  UHL         2        0   1225 eth1
172.17.4.47     00:10:EA:93:01:9E  UHL         1        4      0 lo0
172.17.15.12    54:EE:75:25:CA:94  UHL         5     2818   1652 eth1
172.17.255.255  FF:FF:FF:FF:FF:FF  UHL         0        2      0 eth1
172.21.15.119   172.17.0.1         UGH         1       20      0 eth1
************ MBUF STATISTICS ************
mbufs:2048    clusters: 384    free: 320
drops:   0       waits:   0  drains:   0
      free:1969          data:74          header:5           socket:0
       pcb:0           rtable:0           htable:0           atable:0
    soname:0           soopts:0           ftable:0           rights:0
    ifaddr:0          control:0          oobdata:0

************ INTERFACE STATISTICS ************
***** eth1 *****
Ethernet Address: 00:10:EA:93:01:9E
Address:172.17.4.47     Broadcast Address:172.17.255.255  Net mask:255.255.0.0  
Flags: Up Broadcast Running Active Multicast
Send queue limit:50   length:2    Dropped:0
      Rx Interrupts:4235           Not First:0               Not Last:0
              Giant:0              Non-octet:0
            Bad CRC:0                Overrun:0              Collision:0
      Tx Interrupts:2849            Deferred:0         Late Collision:0
   Retransmit Limit:0               Underrun:0             Misaligned:0
***** lo0 *****
Address:127.0.0.1       Net mask:255.0.0.0
Flags: Up Loopback Running Multicast
Send queue limit:50   length:0    Dropped:0

************ IP Statistics ************
             total packets received        4053
  packets rcvd for unreachable dest         992
    unknown or unsupported protocol           2
 datagrams delivered to upper level        3059
    total ip packets generated here        2845

************ ICMP Statistics ************
              Calls to icmp_error()           4
                        Type 0 sent           3
                        Type 3 sent           2
                number of responses           3
                    Type 3 received           2
                    Type 8 received           3
                 ICMP panic avoided           2

************ UDP Statistics ************
                total input packets        1912
                  no socket on port           4
     of above, arrived as broadcast         166
               total output packets        1749

************ TCP Statistics ************
               connections accepted           4
            connections established           4
      conn. closed (includes drops)           1
     segs where we tried to get rtt         943
                 times we succeeded         942
                  delayed acks sent          19
                 total packets sent        1090
                  data packets sent        1065
                    data bytes sent      132550
              ack-only packets sent          24
 control (SYN|FIN|RST) packets sent           1
             total packets received        1144
       packets received in sequence         836
         bytes received in sequence       26219
                rcvd duplicate acks           1
                   rcvd ack packets         953
           bytes acked by rcvd acks      130034
      times hdr predict ok for acks          92
 times hdr predict ok for data pkts         180
      bogus SYN, e.g. premature ACK           2

IFCONFIG
ifconfig ************ INTERFACE STATISTICS ************
***** eth1 *****
Ethernet Address: 00:10:EA:93:01:9E
Address:172.17.4.47     Broadcast Address:172.17.255.255  Net mask:255.255.0.0  
Flags: Up Broadcast Running Active Multicast
Send queue limit:50   length:1    Dropped:0
      Rx Interrupts:4409           Not First:0               Not Last:0
              Giant:0              Non-octet:0
            Bad CRC:0                Overrun:0              Collision:0
      Tx Interrupts:2927            Deferred:0         Late Collision:0
   Retransmit Limit:0               Underrun:0             Misaligned:0
***** lo0 *****
Address:127.0.0.1       Net mask:255.0.0.0
Flags: Up Loopback Running Multicast
Send queue limit:50   length:0    Dropped:0

________________________________________________________________________
Working with no IP Alias Set up - Bind succeeds NETSTATS
Destination     Gateway/Mask/Hw    Flags     Refs     Use Expire Interface
default         172.17.0.1         UGS         0        0      0 eth1
127.0.0.1       127.0.0.1          UH          0        0      0 lo0
172.17.0.0      255.255.0.0        U           0        0      1 eth1
172.17.0.1                         UHL         1        0      1 eth1
172.17.4.47     00:10:EA:93:01:9E  UHL         1        2      0 lo0
172.17.15.12    54:EE:75:25:CA:94  UHL         7     2481   1428 eth1
172.17.255.255  FF:FF:FF:FF:FF:FF  UHL         0        1      0 eth1
************ MBUF STATISTICS ************
mbufs:2048    clusters: 384    free: 320
drops:   0       waits:   0  drains:   0
      free:1970          data:73          header:5           socket:0
       pcb:0           rtable:0           htable:0           atable:0
    soname:0           soopts:0           ftable:0           rights:0
    ifaddr:0          control:0          oobdata:0

************ INTERFACE STATISTICS ************
***** eth1 *****
Ethernet Address: 00:10:EA:93:01:9E
Address:172.17.4.47     Broadcast Address:172.17.255.255  Net mask:255.255.0.0  
Flags: Up Broadcast Running Active Multicast
Send queue limit:50   length:1    Dropped:0
      Rx Interrupts:3217           Not First:0               Not Last:0
              Giant:0              Non-octet:0
            Bad CRC:0                Overrun:0              Collision:0
      Tx Interrupts:2486            Deferred:0         Late Collision:0
   Retransmit Limit:0               Underrun:0             Misaligned:0
***** lo0 *****
Address:127.0.0.1       Net mask:255.0.0.0
Flags: Up Loopback Running Multicast
Send queue limit:50   length:0    Dropped:0

************ IP Statistics ************
             total packets received        3105
  packets rcvd for unreachable dest         518
    unknown or unsupported protocol           1
 datagrams delivered to upper level        2586
    total ip packets generated here        2485

************ ICMP Statistics ************
              Calls to icmp_error()           2
                        Type 0 sent           4
                        Type 3 sent           1
                number of responses           4
                    Type 3 received           1
                    Type 8 received           4
                 ICMP panic avoided           1

************ UDP Statistics ************
                total input packets        1827
                  no socket on port           2
     of above, arrived as broadcast          73
               total output packets        1759

************ TCP Statistics ************
               connections accepted           3
            connections established           3
     segs where we tried to get rtt         610
                 times we succeeded         609
                  delayed acks sent          17
                 total packets sent         721
                  data packets sent         701
                    data bytes sent       94096
              ack-only packets sent          20
             total packets received         755
       packets received in sequence         537
         bytes received in sequence       11862
                   rcvd ack packets         618
           bytes acked by rcvd acks       91578
      times hdr predict ok for acks         108
 times hdr predict ok for data pkts         131
      bogus SYN, e.g. premature ACK           1


IFCONFIG

ifconfig ************ INTERFACE STATISTICS ************
***** eth1 *****
Ethernet Address: 00:10:EA:93:01:9E
Address:172.17.4.47     Broadcast Address:172.17.255.255  Net mask:255.255.0.0  
Flags: Up Broadcast Running Active Multicast
Send queue limit:50   length:1    Dropped:0
      Rx Interrupts:2612           Not First:0               Not Last:0
              Giant:0              Non-octet:0
            Bad CRC:0                Overrun:0              Collision:0
      Tx Interrupts:2337            Deferred:0         Late Collision:0
   Retransmit Limit:0               Underrun:0             Misaligned:0
***** lo0 *****
Address:127.0.0.1       Net mask:255.0.0.0
Flags: Up Loopback Running Multicast
Send queue limit:50   length:0    Dropped:0

____________________________________________________________________________

I am looking into the FreeBSD stuff now.

On 09/06/2016 02:50, Ben Dart wrote:
>
>     The problem
>
> On our system running RTEMS 4.9.2 we are experiencing a very odd issue 
> with socket communications. We are setting up a socket and using the 
> following command to bind:
>
> if(bind(mSocket,(sockaddr
> *)&localSocketAddress,sizeof(sockaddr_in))==SOCKET_ERROR)
>
> {
>
> interrorOut =errno;
>
> ...
>
> And this works for UDP communications except in a strange specific 
> scenario which is explained below. The problem that we experience is a 
> failure of this|bind|call even though the setup is correct. We get the
> error|125|which for RTEMS is|EADDRNOTAVAIL|:
>
> A nonexistent interface was requested or the requested address was not 
> local.
>
>
>     The Apparent Cause
>
> At boot of the device we can set up our network in 1 of 2 ways:
>
> 1.The Network IP and SUBNET is autoconfigured based on what is in the 
> default bootloader (UBOOT), and is set up through the RTEMS OS.

Do you have the addresses used for this set up for the interface?

> 2.The RTEMS interface function|rtems_bsdnet_ifconfig|is called to set 
> up a custom user defined ethernet interface after boot time.

If you could please supply the exact address etc of the set up that fails that would help?

The ifconfig and netstat shell commands in both cases would be helpful.

>
> For clarification, option 2 is called like this:
>
> rtems_bsdnet_ifconfig(eth_interface,SIOCSIFADDR,&ipaddr);
>
> If the network is set up as indicated by option 1, everything works as 
> expected, but if option 2 is used (even in the case where the setup 
> matches the network options defined by option 1) then the socket bind fails.
>
> *Is there a known reason or bug for RTEMS that indicates that this 
> bind would fail if you set up your own IP Alias?*
>
>
>     Additional Information
>
> We are setting up an IP alias (option 2) using a method foundhere 
> <https://docs.rtems.org/doc-current/share/rtems/pdf/networking.pdf#pag
> e=[23]>under
> IP Alias
> (https://docs.rtems.org/doc-current/share/rtems/pdf/networking.pdf ).
>
> If we bind our socket without specifying a local ADDRESS (ie
> use|INADDR_ANY|) then it works in any case.
>

Have you looked at Section 20.6 Binding Interface Addresses in Steven's UNIX Network Programming Volume 1 (2nd Edition). One of the nice features of having FreeBSD code in RTEMS is the excellent available references. Something else to considering is getting a FreeBSD live DVD and running it up on a box and testing a simple example set up and code. 
If it works on FreeBSD and fails on RTEMS it is something we are doing. 
If it fails on FreeBSD is more likely something you are doing.

Chris
_______________________________________________
users mailing list
users at rtems.org
http://lists.rtems.org/mailman/listinfo/users



More information about the users mailing list