[BACK]Return to if.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / net

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/net/if.c between version 1.193.2.1 and 1.193.2.2

version 1.193.2.1, 2007/08/15 13:49:38 version 1.193.2.2, 2007/09/03 10:23:07
Line 285  if_alloc_sadl(struct ifnet *ifp)
Line 285  if_alloc_sadl(struct ifnet *ifp)
   
         namelen = strlen(ifp->if_xname);          namelen = strlen(ifp->if_xname);
         addrlen = ifp->if_addrlen;          addrlen = ifp->if_addrlen;
         socksize = roundup(          socksize = roundup(sockaddr_dl_measure(namelen, addrlen), sizeof(long));
             MAX(sizeof(*sdl),  
             sockaddr_dl_measure(namelen, addrlen)), sizeof(long));  
         ifasize = sizeof(*ifa) + 2 * socksize;          ifasize = sizeof(*ifa) + 2 * socksize;
         ifa = (struct ifaddr *)malloc(ifasize, M_IFADDR, M_WAITOK);          ifa = (struct ifaddr *)malloc(ifasize, M_IFADDR, M_WAITOK);
         memset(ifa, 0, ifasize);          memset(ifa, 0, ifasize);
Line 295  if_alloc_sadl(struct ifnet *ifp)
Line 293  if_alloc_sadl(struct ifnet *ifp)
         sdl = (struct sockaddr_dl *)(ifa + 1);          sdl = (struct sockaddr_dl *)(ifa + 1);
         mask = (struct sockaddr_dl *)(socksize + (char *)sdl);          mask = (struct sockaddr_dl *)(socksize + (char *)sdl);
   
         sockaddr_dl_init(sdl, ifp->if_index, ifp->if_type,          sockaddr_dl_init(sdl, socksize, ifp->if_index, ifp->if_type,
             ifp->if_xname, namelen, NULL, addrlen);              ifp->if_xname, namelen, NULL, addrlen);
         mask->sdl_len = sockaddr_dl_measure(namelen, 0);          mask->sdl_len = sockaddr_dl_measure(namelen, 0);
         while (namelen != 0)          memset(&mask->sdl_data[0], 0xff, namelen);
                 mask->sdl_data[--namelen] = 0xff;  
   
         ifnet_addrs[ifp->if_index] = ifa;          ifnet_addrs[ifp->if_index] = ifa;
         IFAREF(ifa);          IFAREF(ifa);
Line 1335  ifioctl(struct socket *so, u_long cmd, v
Line 1332  ifioctl(struct socket *so, u_long cmd, v
         }          }
   
 #ifdef COMPAT_OIFREQ  #ifdef COMPAT_OIFREQ
         cmd = cvtcmd(cmd);          cmd = compat_cvtcmd(cmd);
         if (cmd != ocmd) {          if (cmd != ocmd) {
                 oifr = data;                  oifr = data;
                 data = ifr = &ifrb;                  data = ifr = &ifrb;
Line 1386  ifioctl(struct socket *so, u_long cmd, v
Line 1383  ifioctl(struct socket *so, u_long cmd, v
         case SIOCDELMULTI:          case SIOCDELMULTI:
         case SIOCSIFMEDIA:          case SIOCSIFMEDIA:
         case SIOCSDRVSPEC:          case SIOCSDRVSPEC:
           case SIOCG80211:
           case SIOCS80211:
         case SIOCS80211NWID:          case SIOCS80211NWID:
         case SIOCS80211NWKEY:          case SIOCS80211NWKEY:
         case SIOCS80211POWER:          case SIOCS80211POWER:
Line 1555  ifioctl(struct socket *so, u_long cmd, v
Line 1554  ifioctl(struct socket *so, u_long cmd, v
         case SIOCGIFPDSTADDR:          case SIOCGIFPDSTADDR:
         case SIOCGLIFPHYADDR:          case SIOCGLIFPHYADDR:
         case SIOCGIFMEDIA:          case SIOCGIFMEDIA:
           case SIOCG80211:
           case SIOCS80211:
           case SIOCS80211NWID:
           case SIOCS80211NWKEY:
           case SIOCS80211POWER:
           case SIOCS80211BSSID:
           case SIOCS80211CHANNEL:
                 if (ifp->if_ioctl == NULL)                  if (ifp->if_ioctl == NULL)
                         return EOPNOTSUPP;                          return EOPNOTSUPP;
                 error = (*ifp->if_ioctl)(ifp, cmd, data);                  error = (*ifp->if_ioctl)(ifp, cmd, data);
                 break;                  break;
   
         case SIOCSDRVSPEC:          case SIOCSDRVSPEC:
         case SIOCS80211NWID:  
         case SIOCS80211NWKEY:  
         case SIOCS80211POWER:  
         case SIOCS80211BSSID:  
         case SIOCS80211CHANNEL:  
         default:          default:
                 if (so->so_proto == NULL)                  if (so->so_proto == NULL)
                         return EOPNOTSUPP;                          return EOPNOTSUPP;
Line 1667  ifconf(u_long cmd, void *data)
Line 1668  ifconf(u_long cmd, void *data)
         return (0);          return (0);
 }  }
   
   int
   ifreq_setaddr(const u_long cmd, struct ifreq *ifr, const struct sockaddr *sa)
   {
           uint8_t len;
           u_long ncmd;
           const uint8_t osockspace = sizeof(ifr->ifr_addr);
           const uint8_t sockspace = sizeof(ifr->ifr_ifru.ifru_space);
   
   #ifdef INET6
           if (cmd == SIOCGIFPSRCADDR_IN6 || cmd == SIOCGIFPDSTADDR_IN6)
                   len = MIN(sizeof(struct sockaddr_in6), sa->sa_len);
           else
   #endif /* INET6 */
           if ((ncmd = compat_cvtcmd(cmd)) != cmd)
                   len = MIN(sockspace, sa->sa_len);
           else
                   len = MIN(osockspace, sa->sa_len);
           sockaddr_copy(&ifr->ifr_addr, len, sa);
           if (len < sa->sa_len)
                   return EFBIG;
           return 0;
   }
   
 /*  /*
  * Queue message on interface, and start output if interface   * Queue message on interface, and start output if interface
  * not yet active.   * not yet active.

Legend:
Removed from v.1.193.2.1  
changed lines
  Added in v.1.193.2.2

CVSweb <webmaster@jp.NetBSD.org>