svn commit: r212266 - head/sys/netinet
Will Andrews
will at FreeBSD.org
Mon Sep 6 21:06:06 UTC 2010
Author: will
Date: Mon Sep 6 21:06:06 2010
New Revision: 212266
URL: http://svn.freebsd.org/changeset/base/212266
Log:
Fix CARP in backup mode by properly registering its hooks for INET and INET6
using ipproto_{un,}register() and the newly created ip6proto_{un,}register()
so that it can again receive IPPROTO_CARP packets allowing its state machine
to work.
Reviewed by: bz
Approved by: ken (mentor)
Modified:
head/sys/netinet/ip_carp.c
Modified: head/sys/netinet/ip_carp.c
==============================================================================
--- head/sys/netinet/ip_carp.c Mon Sep 6 21:03:30 2010 (r212265)
+++ head/sys/netinet/ip_carp.c Mon Sep 6 21:06:06 2010 (r212266)
@@ -2313,6 +2313,7 @@ carp_mod_cleanup(void)
if_clone_detach(&carp_cloner);
#ifdef INET
if (proto_reg[CARP_INET] == 0) {
+ (void)ipproto_unregister(IPPROTO_CARP);
pf_proto_unregister(PF_INET, IPPROTO_CARP, SOCK_RAW);
proto_reg[CARP_INET] = -1;
}
@@ -2320,6 +2321,7 @@ carp_mod_cleanup(void)
#endif
#ifdef INET6
if (proto_reg[CARP_INET6] == 0) {
+ (void)ip6proto_unregister(IPPROTO_CARP);
pf_proto_unregister(PF_INET6, IPPROTO_CARP, SOCK_RAW);
proto_reg[CARP_INET6] = -1;
}
@@ -2335,6 +2337,7 @@ carp_mod_cleanup(void)
static int
carp_mod_load(void)
{
+ int err;
if_detach_event_tag = EVENTHANDLER_REGISTER(ifnet_departure_event,
carp_ifdetach, NULL, EVENTHANDLER_PRI_ANY);
@@ -2357,6 +2360,12 @@ carp_mod_load(void)
carp_mod_cleanup();
return (EINVAL);
}
+ err = ip6proto_register(IPPROTO_CARP);
+ if (err) {
+ printf("carp: error %d registering with INET6\n", err);
+ carp_mod_cleanup();
+ return (EINVAL);
+ }
#endif
#ifdef INET
carp_iamatch_p = carp_iamatch;
@@ -2367,6 +2376,12 @@ carp_mod_load(void)
carp_mod_cleanup();
return (EINVAL);
}
+ err = ipproto_register(IPPROTO_CARP);
+ if (err) {
+ printf("carp: error %d registering with INET\n", err);
+ carp_mod_cleanup();
+ return (EINVAL);
+ }
#endif
return 0;
}
More information about the svn-src-head
mailing list