version 1.31, 2006/03/05 23:47:08 |
version 1.32, 2006/03/06 20:33:52 |
Line 626 mld_allocbuf(mh, len, in6m, type) |
|
Line 626 mld_allocbuf(mh, len, in6m, type) |
|
* Add an address to the list of IP6 multicast addresses for a given interface. |
* Add an address to the list of IP6 multicast addresses for a given interface. |
*/ |
*/ |
struct in6_multi * |
struct in6_multi * |
in6_addmulti(maddr6, ifp, errorp, delay) |
in6_addmulti(maddr6, ifp, errorp, timer) |
struct in6_addr *maddr6; |
struct in6_addr *maddr6; |
struct ifnet *ifp; |
struct ifnet *ifp; |
int *errorp, delay; |
int *errorp, timer; |
{ |
{ |
struct in6_ifaddr *ia; |
struct in6_ifaddr *ia; |
struct in6_ifreq ifr; |
struct in6_ifreq ifr; |
Line 705 in6_addmulti(maddr6, ifp, errorp, delay) |
|
Line 705 in6_addmulti(maddr6, ifp, errorp, delay) |
|
} |
} |
|
|
callout_init(in6m->in6m_timer_ch); |
callout_init(in6m->in6m_timer_ch); |
in6m->in6m_timer = delay; |
in6m->in6m_timer = timer; |
if (in6m->in6m_timer > 0) { |
if (in6m->in6m_timer > 0) { |
in6m->in6m_state = MLD_REPORTPENDING; |
in6m->in6m_state = MLD_REPORTPENDING; |
mld_starttimer(in6m); |
mld_starttimer(in6m); |
Line 783 in6_delmulti(in6m) |
|
Line 783 in6_delmulti(in6m) |
|
|
|
|
|
struct in6_multi_mship * |
struct in6_multi_mship * |
in6_joingroup(ifp, addr, errorp, delay) |
in6_joingroup(ifp, addr, errorp, timer) |
struct ifnet *ifp; |
struct ifnet *ifp; |
struct in6_addr *addr; |
struct in6_addr *addr; |
int *errorp, delay; |
int *errorp, timer; |
{ |
{ |
struct in6_multi_mship *imm; |
struct in6_multi_mship *imm; |
|
|
Line 797 in6_joingroup(ifp, addr, errorp, delay) |
|
Line 797 in6_joingroup(ifp, addr, errorp, delay) |
|
} |
} |
|
|
memset(imm, 0, sizeof(*imm)); |
memset(imm, 0, sizeof(*imm)); |
imm->i6mm_maddr = in6_addmulti(addr, ifp, errorp, delay); |
imm->i6mm_maddr = in6_addmulti(addr, ifp, errorp, timer); |
if (!imm->i6mm_maddr) { |
if (!imm->i6mm_maddr) { |
/* *errorp is alrady set */ |
/* *errorp is alrady set */ |
free(imm, M_IPMADDR); |
free(imm, M_IPMADDR); |