Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/ip_carp.c
Show First 20 Lines • Show All 1,412 Lines • ▼ Show 20 Lines | case AF_INET6: | ||||
im6o->im6o_max_memberships = IPV6_MIN_MEMBERSHIPS; | im6o->im6o_max_memberships = IPV6_MIN_MEMBERSHIPS; | ||||
im6o->im6o_multicast_hlim = CARP_DFLTTL; | im6o->im6o_multicast_hlim = CARP_DFLTTL; | ||||
im6o->im6o_multicast_ifp = ifp; | im6o->im6o_multicast_ifp = ifp; | ||||
/* Join IPv6 CARP multicast group. */ | /* Join IPv6 CARP multicast group. */ | ||||
bzero(&in6, sizeof(in6)); | bzero(&in6, sizeof(in6)); | ||||
in6.s6_addr16[0] = htons(0xff02); | in6.s6_addr16[0] = htons(0xff02); | ||||
in6.s6_addr8[15] = 0x12; | in6.s6_addr8[15] = 0x12; | ||||
if ((error = in6_setscope(&in6, ifp, NULL)) != 0) { | if ((error = in6_setscope(&in6, ifp, NULL)) != 0) | ||||
free(im6o->im6o_membership, M_CARP); | goto error_out; | ||||
break; | |||||
} | |||||
in6m = NULL; | in6m = NULL; | ||||
if ((error = in6_joingroup(ifp, &in6, NULL, &in6m, 0)) != 0) { | if ((error = in6_joingroup(ifp, &in6, NULL, &in6m, 0)) != 0) | ||||
free(im6o->im6o_membership, M_CARP); | goto error_out; | ||||
break; | |||||
} | /* reference acquired by joingroup */ | ||||
in6m_acquire(in6m); | |||||
im6o->im6o_membership[0] = in6m; | im6o->im6o_membership[0] = in6m; | ||||
im6o->im6o_num_memberships++; | im6o->im6o_num_memberships++; | ||||
/* Join solicited multicast address. */ | /* Join solicited multicast address. */ | ||||
bzero(&in6, sizeof(in6)); | bzero(&in6, sizeof(in6)); | ||||
in6.s6_addr16[0] = htons(0xff02); | in6.s6_addr16[0] = htons(0xff02); | ||||
in6.s6_addr32[1] = 0; | in6.s6_addr32[1] = 0; | ||||
in6.s6_addr32[2] = htonl(1); | in6.s6_addr32[2] = htonl(1); | ||||
in6.s6_addr32[3] = 0; | in6.s6_addr32[3] = 0; | ||||
in6.s6_addr8[12] = 0xff; | in6.s6_addr8[12] = 0xff; | ||||
if ((error = in6_setscope(&in6, ifp, NULL)) != 0) { | if ((error = in6_setscope(&in6, ifp, NULL)) != 0) | ||||
in6_leavegroup(im6o->im6o_membership[0], NULL); | goto error_out; | ||||
free(im6o->im6o_membership, M_CARP); | |||||
break; | |||||
} | |||||
in6m = NULL; | in6m = NULL; | ||||
if ((error = in6_joingroup(ifp, &in6, NULL, &in6m, 0)) != 0) { | if ((error = in6_joingroup(ifp, &in6, NULL, &in6m, 0)) != 0) | ||||
in6_leavegroup(im6o->im6o_membership[0], NULL); | goto error_out; | ||||
free(im6o->im6o_membership, M_CARP); | /* reference acquired by joingroup */ | ||||
break; | |||||
} | |||||
in6m_acquire(in6m); | |||||
im6o->im6o_membership[1] = in6m; | im6o->im6o_membership[1] = in6m; | ||||
im6o->im6o_num_memberships++; | im6o->im6o_num_memberships++; | ||||
break; | |||||
error_out: | |||||
if (im6o->im6o_membership[0]) | |||||
in6_leavegroup(im6o->im6o_membership[0], NULL); | |||||
free(im6o->im6o_membership, M_CARP); | |||||
break; | break; | ||||
} | } | ||||
#endif | #endif | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 856 Lines • Show Last 20 Lines |