- if (ifnet == 0)
- return (EADDRNOTAVAIL);
- /*
- * Should we verify address not already in use?
- * Some say yes, others no.
- */
- if (addr) switch (addr->sa_family) {
-
- case AF_IMPLINK:
- case AF_INET:
- if (((struct sockaddr_in *)addr)->sin_addr.s_addr &&
- if_ifwithaddr(addr) == 0)
- return (EADDRNOTAVAIL);
- break;
-
-#ifdef PUP
- /*
- * Curious, we convert PUP address format to internet
- * to allow us to verify we're asking for an Ethernet
- * interface. This is wrong, but things are heavily
- * oriented towards the internet addressing scheme, and
- * converting internet to PUP would be very expensive.
- */
- case AF_PUP: {
- struct sockaddr_pup *spup = (struct sockaddr_pup *)addr;
- struct sockaddr_in inpup;
-
- bzero((caddr_t)&inpup, sizeof(inpup));
- inpup.sin_family = AF_INET;
- inpup.sin_addr.s_net = spup->sp_net;
- inpup.sin_addr.s_impno = spup->sp_host;
- if (inpup.sin_addr.s_addr &&
- if_ifwithaddr((struct sockaddr *)&inpup) == 0)
- return (EADDRNOTAVAIL);
- break;
- }
-#endif
-
- default:
- return (EAFNOSUPPORT);
- }
- m = m_getclr(M_DONTWAIT);