]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Merge bk://www.ntp.org/home/bk/ntp-dev
authorFrank Kardel <kardel@ntp.org>
Sun, 25 Sep 2005 10:44:04 +0000 (10:44 +0000)
committerFrank Kardel <kardel@ntp.org>
Sun, 25 Sep 2005 10:44:04 +0000 (10:44 +0000)
into  pogo.udel.edu:/pogo/users/kardel/dynamic-if/ntp-dev

bk: 43367f74djhAv8TeqDAnotvALG96AQ

1  2 
ntpd/ntp_io.c

diff --cc ntpd/ntp_io.c
index ab5a6c12da8539b7edff6ddb67ddd0ae15b02ebe,57e9d14370964b9aba01d97bb2b9987c3bdf8442..dd010dad0ff172342854fe84a9b73a88cb07453f
@@@ -698,30 -421,31 +698,32 @@@ create_wildcards(u_short port) 
         * create pseudo-interface with wildcard IPv6 address
         */
        if (isc_net_probeipv6() == ISC_R_SUCCESS) {
 -              inter_list[idx].family = AF_INET6;
 -              inter_list[idx].sin.ss_family = AF_INET6;
 -              ((struct sockaddr_in6*)&inter_list[idx].sin)->sin6_addr = in6addr_any;
 -              ((struct sockaddr_in6*)&inter_list[idx].sin)->sin6_port = port;
 +              struct interface *interface = new_interface(NULL);
 +
 +              interface->family = AF_INET6;
 +              interface->sin.ss_family = AF_INET6;
 +              ((struct sockaddr_in6*)&interface->sin)->sin6_addr = in6addr_any;
 +              ((struct sockaddr_in6*)&interface->sin)->sin6_port = port;
+ # ifdef ISC_PLATFORM_HAVESCOPEID
 -              ((struct sockaddr_in6*)&inter_list[idx].sin)->sin6_scope_id = 0;
 +              ((struct sockaddr_in6*)&interface->sin)->sin6_scope_id = 0;
+ # endif
 -              (void) strncpy(inter_list[idx].name, "wildcard", sizeof(inter_list[idx].name));
 -              inter_list[idx].mask.ss_family = AF_INET6;
 -              memset(&((struct sockaddr_in6*)&inter_list[idx].mask)->sin6_addr.s6_addr, 0xff, sizeof(struct in6_addr));
 -              inter_list[idx].bfd = INVALID_SOCKET;
 -              inter_list[idx].num_mcast = 0;
 -              inter_list[idx].received = 0;
 -              inter_list[idx].sent = 0;
 -              inter_list[idx].notsent = 0;
 -              inter_list[idx].flags = INT_UP;
 -              inter_list[idx].ignore_packets = ISC_TRUE;
 -              any6_interface = &inter_list[idx];
 -              wildipv6 = idx;
 -              idx++;
 -      }
 -#endif
 -      return (idx);
 +              (void) strncpy(interface->name, "wildcard", sizeof(interface->name));
 +              interface->mask.ss_family = AF_INET6;
 +              memset(&((struct sockaddr_in6*)&interface->mask)->sin6_addr.s6_addr, 0xff, sizeof(struct in6_addr));
 +              interface->flags = INT_UP | INT_WILDCARD;
 +              interface->ignore_packets = ISC_TRUE;
 +
 +              interface->fd = open_socket(&interface->sin,
 +                               interface->flags, 0, interface);
 +
 +              wildipv6 = interface;
 +              any6_interface = interface;
 +              add_interface(interface);
 +      }
 +#endif
  }
  
 +
  isc_boolean_t
  address_okay(isc_interface_t *isc_if) {
  
@@@ -1649,39 -1231,46 +1651,41 @@@ io_multicast_add
                break;
        case AF_INET6:
  #ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
 -              memcpy(&(((struct sockaddr_in6 *)&inter_list[ind].sin)->sin6_addr),
 +              memcpy(&(((struct sockaddr_in6 *)&interface->sin)->sin6_addr),
                       &((struct sockaddr_in6*)&addr)->sin6_addr,
                       sizeof(struct in6_addr));
 -              ((struct sockaddr_in6*)&inter_list[ind].sin)->sin6_port = htons(NTP_PORT);
 +              ((struct sockaddr_in6*)&interface->sin)->sin6_port = htons(NTP_PORT);
  #ifdef ISC_PLATFORM_HAVESCOPEID
 -              ((struct sockaddr_in6*)&inter_list[ind].sin)->sin6_scope_id = ((struct sockaddr_in6*)&addr)->sin6_scope_id;
 +              ((struct sockaddr_in6*)&interface->sin)->sin6_scope_id = ((struct sockaddr_in6*)&addr)->sin6_scope_id;
  #endif
 -              memset(&((struct sockaddr_in6*)&inter_list[ind].mask)->sin6_addr.s6_addr, 0xff, sizeof(struct in6_addr));
 +              memset(&((struct sockaddr_in6*)&interface->mask)->sin6_addr.s6_addr, 0xff, sizeof(struct in6_addr));
  #endif
 -              i = findlocalcastinterface(&addr, INT_MULTICAST);
 +              iface = findlocalcastinterface(&addr, INT_MULTICAST);
+ # ifdef ISC_PLATFORM_HAVESCOPEID
 -              if (i >= 0)
 -                      lscope = ((struct sockaddr_in6*)&inter_list[i].sin)->sin6_scope_id;
 +              if (iface) {
 +                      lscope = ((struct sockaddr_in6*)&iface->sin)->sin6_scope_id;
-                       DPRINTF(1, ("Found interface #%d %s, scope: %d for address %s\n", iface->ifnum, iface->name, lscope, stoa(&addr)));
 +              }
+ # endif
 -#ifdef DEBUG
 -      if (debug > 1)
 -              printf("Found interface index %d, scope: %d for address %s\n",
 -                      i, lscope, stoa(&addr));
 -#endif
++              DPRINTF(1, ("Found interface #%d %s, scope: %d for address %s\n", iface->ifnum, iface->name, lscope, stoa(&addr)));
                break;
        }
 +              
 +      interface->bfd = INVALID_SOCKET;
 +      interface->fd = open_socket(&interface->sin,
 +                          INT_MULTICAST, 1, interface);
  
 -      inter_list[ind].bfd = INVALID_SOCKET;
 -      inter_list[ind].fd = open_socket(&inter_list[ind].sin,
 -                          INT_MULTICAST, 1, &inter_list[ind], ind);
 -      if (inter_list[ind].fd != INVALID_SOCKET)
 +      if (interface->fd != INVALID_SOCKET)
        {
 -              inter_list[ind].bfd = INVALID_SOCKET;
 -              inter_list[ind].ignore_packets = ISC_FALSE;
 -
 -              (void) strncpy(inter_list[ind].name, "multicast",
 -                      sizeof(inter_list[ind].name));
 -              ((struct sockaddr_in*)&inter_list[ind].mask)->sin_addr.s_addr =
 +              interface->bfd = INVALID_SOCKET;
 +              interface->flags |= INT_MCASTIF;
 +              interface->ignore_packets = ISC_FALSE;
 +              
 +              (void) strncpy(interface->name, "multicast",
 +                      sizeof(interface->name));
 +              ((struct sockaddr_in*)&interface->mask)->sin_addr.s_addr =
                                                htonl(~(u_int32)0);
 -              if (ind >= ninterfaces)
 -                      ninterfaces = ind + 1;
 -#ifdef DEBUG
 -              if(debug > 1)
 -                      print_interface(ind);
 -#endif
 +              DPRINT_INTERFACE(2, (interface, "multicast add ", "\n"));
 +              add_interface(interface);
        }
        else
        {
@@@ -1995,11 -1511,16 +1999,16 @@@ open_socket
                                sprintf(buff,
                                  "bind() fd %d, family %d, port %d, scope %d, addr %s, in6_is_addr_multicast=%d flags=%d fails: %%m",
                                  fd, addr->ss_family, (int)ntohs(((struct sockaddr_in6*)addr)->sin6_port),
-                                 ((struct sockaddr_in6*)addr)->sin6_scope_id, stoa(addr),
+ # ifdef ISC_PLATFORM_HAVESCOPEID
+                                 ((struct sockaddr_in6*)addr)->sin6_scope_id
+ # else
+                                 -1
+ # endif
+                               , stoa(addr),
                                  IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6*)addr)->sin6_addr), flags);
  #endif
 -              else 
 -                      return (INVALID_SOCKET);
 +              else
 +                      return INVALID_SOCKET;
  
                /*
                 * Don't log this under all conditions
@@@ -2709,15 -2341,16 +2718,17 @@@ findlocalinterface
        }
  #ifdef INCLUDE_IPV6_SUPPORT
        else if(addr->ss_family == AF_INET6) {
 -              memcpy(&((struct sockaddr_in6*)&saddr)->sin6_addr, &((struct sockaddr_in6*)addr)->sin6_addr, sizeof(struct in6_addr));
 +              memcpy(&((struct sockaddr_in6*)&saddr)->sin6_addr, &((struct sockaddr_in6*)addr)->sin6_addr, sizeof(struct in6_addr));
                ((struct sockaddr_in6*)&saddr)->sin6_port = htons(2000);
+ # ifdef ISC_PLATFORM_HAVESCOPEID
                ((struct sockaddr_in6*)&saddr)->sin6_scope_id = ((struct sockaddr_in6*)addr)->sin6_scope_id;
+ # endif
        }
  #endif
 +      
        s = socket(addr->ss_family, SOCK_DGRAM, 0);
        if (s == INVALID_SOCKET)
 -              return (-1);
 +              return NULL;
  
        rtn = connect(s, (struct sockaddr *)&saddr, SOCKLEN(&saddr));
  #ifndef SYS_WINNT