Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet6/in6.c
Show First 20 Lines • Show All 159 Lines • ▼ Show 20 Lines | static int in6_update_ifa_internal(struct ifnet *, struct in6_aliasreq *, | ||||
struct in6_ifaddr *, int, int); | struct in6_ifaddr *, int, int); | ||||
static int in6_broadcast_ifa(struct ifnet *, struct in6_aliasreq *, | static int in6_broadcast_ifa(struct ifnet *, struct in6_aliasreq *, | ||||
struct in6_ifaddr *, int); | struct in6_ifaddr *, int); | ||||
#define ifa2ia6(ifa) ((struct in6_ifaddr *)(ifa)) | #define ifa2ia6(ifa) ((struct in6_ifaddr *)(ifa)) | ||||
#define ia62ifa(ia6) (&((ia6)->ia_ifa)) | #define ia62ifa(ia6) (&((ia6)->ia_ifa)) | ||||
void | __noinline void | ||||
in6_newaddrmsg(struct in6_ifaddr *ia, int cmd) | in6_newaddrmsg(struct in6_ifaddr *ia, int cmd) | ||||
{ | { | ||||
struct sockaddr_dl gateway; | struct sockaddr_dl gateway; | ||||
struct sockaddr_in6 mask, addr; | struct sockaddr_in6 mask, addr; | ||||
struct rtentry rt; | struct rtentry rt; | ||||
int fibnum; | int fibnum; | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 701 Lines • ▼ Show 20 Lines | cleanup: | ||||
return (error); | return (error); | ||||
} | } | ||||
/* | /* | ||||
* Update parameters of an IPv6 interface address. | * Update parameters of an IPv6 interface address. | ||||
* If necessary, a new entry is created and linked into address chains. | * If necessary, a new entry is created and linked into address chains. | ||||
* This function is separated from in6_control(). | * This function is separated from in6_control(). | ||||
*/ | */ | ||||
int | __noinline int | ||||
in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra, | in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra, | ||||
struct in6_ifaddr *ia, int flags) | struct in6_ifaddr *ia, int flags) | ||||
{ | { | ||||
int error, hostIsNew = 0; | int error, hostIsNew = 0; | ||||
if ((error = in6_validate_ifra(ifp, ifra, ia, flags)) != 0) | if ((error = in6_validate_ifra(ifp, ifra, ia, flags)) != 0) | ||||
return (error); | return (error); | ||||
▲ Show 20 Lines • Show All 240 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* Update/configure interface address parameters: | * Update/configure interface address parameters: | ||||
* | * | ||||
* 1) Update lifetime | * 1) Update lifetime | ||||
* 2) Update interface metric ad flags | * 2) Update interface metric ad flags | ||||
* 3) Notify other subsystems | * 3) Notify other subsystems | ||||
*/ | */ | ||||
static int | __noinline static int | ||||
in6_update_ifa_internal(struct ifnet *ifp, struct in6_aliasreq *ifra, | in6_update_ifa_internal(struct ifnet *ifp, struct in6_aliasreq *ifra, | ||||
struct in6_ifaddr *ia, int hostIsNew, int flags) | struct in6_ifaddr *ia, int hostIsNew, int flags) | ||||
{ | { | ||||
int error; | int error; | ||||
/* update timestamp */ | /* update timestamp */ | ||||
ia->ia6_updatetime = time_uptime; | ia->ia6_updatetime = time_uptime; | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* Do link-level ifa job: | * Do link-level ifa job: | ||||
* 1) Add lle entry for added address | * 1) Add lle entry for added address | ||||
* 2) Notifies routing socket users about new address | * 2) Notifies routing socket users about new address | ||||
* 3) join appropriate multicast group | * 3) join appropriate multicast group | ||||
* 4) start DAD if enabled | * 4) start DAD if enabled | ||||
*/ | */ | ||||
static int | __noinline static int | ||||
in6_broadcast_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra, | in6_broadcast_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra, | ||||
struct in6_ifaddr *ia, int flags) | struct in6_ifaddr *ia, int flags) | ||||
{ | { | ||||
struct in6_multi *in6m_sol; | struct in6_multi *in6m_sol; | ||||
int error = 0; | int error = 0; | ||||
/* Add local address to lltable, if necessary (ex. on p2p link). */ | /* Add local address to lltable, if necessary (ex. on p2p link). */ | ||||
if ((error = nd6_add_ifa_lle(ia)) != 0) { | if ((error = nd6_add_ifa_lle(ia)) != 0) { | ||||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | if ((ia->ia6_flags & IN6_IFF_TENTATIVE)) { | ||||
nd6_dad_start((struct ifaddr *)ia, delay); | nd6_dad_start((struct ifaddr *)ia, delay); | ||||
} | } | ||||
in6_newaddrmsg(ia, RTM_ADD); | in6_newaddrmsg(ia, RTM_ADD); | ||||
ifa_free(&ia->ia_ifa); | ifa_free(&ia->ia_ifa); | ||||
return (error); | return (error); | ||||
} | } | ||||
void | __noinline void | ||||
in6_purgeaddr(struct ifaddr *ifa) | in6_purgeaddr(struct ifaddr *ifa) | ||||
{ | { | ||||
struct ifnet *ifp = ifa->ifa_ifp; | struct ifnet *ifp = ifa->ifa_ifp; | ||||
struct in6_ifaddr *ia = (struct in6_ifaddr *) ifa; | struct in6_ifaddr *ia = (struct in6_ifaddr *) ifa; | ||||
struct in6_multi_mship *imm; | struct in6_multi_mship *imm; | ||||
int plen, error; | int plen, error; | ||||
if (ifa->ifa_carp) | if (ifa->ifa_carp) | ||||
▲ Show 20 Lines • Show All 1,270 Lines • Show Last 20 Lines |