Index: sys/netinet6/in6.c =================================================================== --- sys/netinet6/in6.c +++ sys/netinet6/in6.c @@ -627,6 +627,7 @@ * later advertised RAs (when accept_rtadv is non 0), which is * an intended behavior. */ + pr0.ndpr_raf_manual = 1; /* mark as manually-configured */ pr0.ndpr_raf_onlink = 1; /* should be configurable? */ pr0.ndpr_raf_auto = ((ifra->ifra_flags & IN6_IFF_AUTOCONF) != 0); Index: sys/netinet6/in6_var.h =================================================================== --- sys/netinet6/in6_var.h +++ sys/netinet6/in6_var.h @@ -326,7 +326,8 @@ struct prf_ra { u_char onlink : 1; u_char autonomous : 1; - u_char reserved : 6; + u_char manual: 1; + u_char reserved : 5; } prf_ra; u_char prf_reserved1; u_short prf_reserved2; @@ -357,6 +358,7 @@ #define ipr_raf_onlink ipr_flags.prf_ra.onlink #define ipr_raf_auto ipr_flags.prf_ra.autonomous +#define ipr_raf_manual ipr_flags.prf_ra.manual #define ipr_statef_onlink ipr_flags.prf_state.onlink Index: sys/netinet6/nd6.h =================================================================== --- sys/netinet6/nd6.h +++ sys/netinet6/nd6.h @@ -170,6 +170,7 @@ /* Prefix status */ #define NDPRF_ONLINK 0x1 #define NDPRF_DETACHED 0x2 +#define NDPRF_MANUAL 0x4 /* protocol constants */ #define MAX_RTR_SOLICITATION_DELAY 1 /* 1sec */ @@ -243,6 +244,7 @@ #define ndpr_raf ndpr_flags #define ndpr_raf_onlink ndpr_flags.onlink #define ndpr_raf_auto ndpr_flags.autonomous +#define ndpr_raf_manual ndpr_flags.manual #define ndpr_raf_router ndpr_flags.router struct nd_pfxrouter { Index: sys/netinet6/nd6.c =================================================================== --- sys/netinet6/nd6.c +++ sys/netinet6/nd6.c @@ -1788,6 +1788,8 @@ LIST_FOREACH_SAFE(pr, &V_nd_prefix, ndpr_entry, next) { if (IN6_IS_ADDR_LINKLOCAL(&pr->ndpr_prefix.sin6_addr)) continue; /* XXX */ + if (pr->ndpr_raf_manual) + continue; /* Skip manually-configured prefixes */ nd6_prefix_unlink(pr, &prl); } ND6_WUNLOCK();