ifid
in6_ifadd(struct nd_prefix *pr, struct in6_addr *ifid)
if (ifid == NULL || IN6_IS_ADDR_UNSPECIFIED(ifid))
ifid = &ib->ia_addr.sin6_addr;
(ifid->s6_addr32[0] & ~mask.s6_addr32[0]);
(ifid->s6_addr32[1] & ~mask.s6_addr32[1]);
(ifid->s6_addr32[2] & ~mask.s6_addr32[2]);
(ifid->s6_addr32[3] & ~mask.s6_addr32[3]);
struct ifid *ifhp = (struct ifid *)fhp;
struct ifid *ifhp;
ifhp = (struct ifid *)fhp;
ifhp->ifid_len = sizeof(struct ifid);
struct ifid *ifhp;
ifhp = (struct ifid *)fhp;
struct ifid *ifhp;
ifhp = (struct ifid *)fhp;
ifhp->ifid_len = sizeof(struct ifid);
SetInterfaceID(u_char *ifid, int userandom)
memset(ifid, 0, IPV6CP_IFIDLEN);
ifid[0] = cp[0];
ifid[0] ^= 0x02; /* reverse the u/l bit*/
ifid[1] = cp[1];
ifid[2] = cp[2];
ifid[3] = 0xff;
ifid[4] = 0xfe;
ifid[5] = cp[3];
ifid[6] = cp[4];
ifid[7] = cp[5];
memcpy(ifid, &r1, sizeof(r1));
memcpy(ifid + 4, &r2, sizeof(r2));
ifid[0] &= 0xfd;
ipv6cp_ValidateInterfaceID(struct ipv6cp *ipv6cp, u_char *ifid,
if (memcmp(ifid, zero, IPV6CP_IFIDLEN) != 0
&& memcmp(ifid, ipv6cp->my_ifid, IPV6CP_IFIDLEN) != 0)
memcpy(ipv6cp->his_ifid, ifid, IPV6CP_IFIDLEN);
if (memcmp(ifid, ipv6cp->his_ifid, IPV6CP_IFIDLEN) == 0)
u_char ifid[IPV6CP_IFIDLEN], zero[IPV6CP_IFIDLEN];
memcpy(ifid, opt->data, IPV6CP_IFIDLEN);
ifid[0], ifid[1], ifid[2], ifid[3], ifid[4], ifid[5], ifid[6], ifid[7]);
ipv6cp_ValidateInterfaceID(ipv6cp, ifid, dec);
if (memcmp(ifid, zero, IPV6CP_IFIDLEN) == 0) {
} else if (memcmp(ifid, ipv6cp->his_ifid, IPV6CP_IFIDLEN) == 0) {
ifid[0], ifid[1], ifid[2], ifid[3],
ifid[4], ifid[5], ifid[6], ifid[7]);
} else if (memcmp(ifid, ipv6cp->my_ifid, IPV6CP_IFIDLEN) != 0) {
while (n && !ipcp_SetIPv6address(ipv6cp, ifid, ipv6cp->his_ifid)) {
SetInterfaceID(ifid, 1);
} while (n && memcmp(ifid, ipv6cp->his_ifid, IPV6CP_IFIDLEN) == 0);
ifid[0], ifid[1], ifid[2], ifid[3],
ifid[4], ifid[5], ifid[6], ifid[7]);
memcpy(ipv6cp->my_ifid, ifid, IPV6CP_IFIDLEN);
memset(ifid, 0, IPV6CP_IFIDLEN);
ipv6cp_ValidateInterfaceID(ipv6cp, ifid, dec);