yes please. while in there you should deleted the commented .Fl m from
the man page, too.
OK florian@

On Mon, Nov 30, 2015 at 08:12:32PM +0100, Jeremie Courreges-Anglas wrote:
> 
> ie. https://tools.ietf.org/html/rfc2894
> 
> This code has been rotting since a long time, only activated during two
> months after the initial import from KAME. Since rtadvd.c rev.1.3,
> the -R command-line switch has no effect.  This protocol is unsafe and
> assumes that communication between renumbered routers and rrenumd(8) (a
> KAME tool) has been secured with IPSec.  I've failed to find examples of
> actual use in the Real World.
> 
> ok to unlink it?
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rtadvd/Makefile,v
> retrieving revision 1.7
> diff -u -p -r1.7 Makefile
> --- Makefile  25 Oct 2015 21:23:42 -0000      1.7
> +++ Makefile  30 Nov 2015 18:55:25 -0000
> @@ -1,7 +1,7 @@
>  #    $OpenBSD: Makefile,v 1.7 2015/10/25 21:23:42 jca Exp $
>  
>  PROG=        rtadvd
> -SRCS=        rtadvd.c rrenum.c advcap.c if.c config.c timer.c dump.c log.c
> +SRCS=        rtadvd.c advcap.c if.c config.c timer.c dump.c log.c
>  
>  CFLAGS+=-Wall
>  MAN= rtadvd.8 rtadvd.conf.5
> Index: rrenum.c
> ===================================================================
> RCS file: rrenum.c
> diff -N rrenum.c
> --- rrenum.c  16 Jan 2015 06:40:20 -0000      1.18
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,465 +0,0 @@
> -/*   $OpenBSD: rrenum.c,v 1.18 2015/01/16 06:40:20 deraadt Exp $     */
> -/*   $KAME: rrenum.c,v 1.11 2002/05/21 14:26:55 itojun Exp $ */
> -
> -/*
> - * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
> - * All rights reserved.
> - *
> - * Redistribution and use in source and binary forms, with or without
> - * modification, are permitted provided that the following conditions
> - * are met:
> - * 1. Redistributions of source code must retain the above copyright
> - *    notice, this list of conditions and the following disclaimer.
> - * 2. Redistributions in binary form must reproduce the above copyright
> - *    notice, this list of conditions and the following disclaimer in the
> - *    documentation and/or other materials provided with the distribution.
> - * 3. Neither the name of the project nor the names of its contributors
> - *    may be used to endorse or promote products derived from this software
> - *    without specific prior written permission.
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
> - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> - * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
> - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> - * SUCH DAMAGE.
> - */
> -#include <sys/types.h>
> -#include <sys/ioctl.h>
> -#include <sys/socket.h>
> -#include <sys/sysctl.h>
> -#include <sys/queue.h>
> -
> -#include <net/if.h>
> -#include <net/route.h>
> -#include <netinet/in.h>
> -#include <netinet6/in6_var.h>
> -#include <netinet/icmp6.h>
> -
> -#include <arpa/inet.h>
> -
> -#include <errno.h>
> -#include <string.h>
> -#include <stdlib.h>
> -#include "rtadvd.h"
> -#include "rrenum.h"
> -#include "if.h"
> -#include "log.h"
> -
> -#define      RR_ISSET_SEGNUM(segnum_bits, segnum) \
> -     ((((segnum_bits)[(segnum) >> 5]) & (1 << ((segnum) & 31))) != 0)
> -#define      RR_SET_SEGNUM(segnum_bits, segnum) \
> -     (((segnum_bits)[(segnum) >> 5]) |= (1 << ((segnum) & 31)))
> -
> -struct rr_operation {
> -     u_long  rro_seqnum;
> -     u_long  rro_segnum_bits[8];
> -};
> -
> -static struct rr_operation rro;
> -static int rr_rcvifindex;
> -static int rrcmd2pco[RPM_PCO_MAX] = {
> -     0,
> -     SIOCAIFPREFIX_IN6,
> -     SIOCCIFPREFIX_IN6,
> -     SIOCSGIFPREFIX_IN6
> -};
> -static int s = -1;
> -
> -/*
> - * Check validity of a Prefix Control Operation(PCO).
> - * Return 0 on success, 1 on failure.
> - */
> -static int
> -rr_pco_check(int len, struct rr_pco_match *rpm)
> -{
> -     struct rr_pco_use *rpu, *rpulim;
> -     int checklen;
> -
> -     /* rpm->rpm_len must be (4N * 3) as router-renum-05.txt */
> -     if ((rpm->rpm_len - 3) < 0 || /* must be at least 3 */
> -         (rpm->rpm_len - 3) & 0x3) { /* must be multiple of 4 */
> -             log_warnx("rpm_len %d is not 4N * 3", rpm->rpm_len);
> -             return 1;
> -     }
> -     /* rpm->rpm_code must be valid value */
> -     switch (rpm->rpm_code) {
> -     case RPM_PCO_ADD:
> -     case RPM_PCO_CHANGE:
> -     case RPM_PCO_SETGLOBAL:
> -             break;
> -     default:
> -             log_warnx("unknown rpm_code %d", rpm->rpm_code);
> -             return 1;
> -     }
> -     /* rpm->rpm_matchlen must be 0 to 128 inclusive */
> -     if (rpm->rpm_matchlen > 128) {
> -             log_warnx("rpm_matchlen %d is over 128", rpm->rpm_matchlen);
> -             return 1;
> -     }
> -
> -     /*
> -      * rpu->rpu_uselen, rpu->rpu_keeplen, and sum of them must be
> -      * between 0 and 128 inclusive
> -      */
> -     for (rpu = (struct rr_pco_use *)(rpm + 1),
> -          rpulim = (struct rr_pco_use *)((char *)rpm + len);
> -          rpu < rpulim;
> -          rpu += 1) {
> -             checklen = rpu->rpu_uselen;
> -             checklen += rpu->rpu_keeplen;
> -             /*
> -              * omit these check, because either of rpu_uselen
> -              * and rpu_keeplen is unsigned char
> -              *  (128 > rpu_uselen > 0)
> -              *  (128 > rpu_keeplen > 0)
> -              *  (rpu_uselen + rpu_keeplen > 0)
> -              */
> -             if (checklen > 128) {
> -                     log_warnx("sum of rpu_uselen %d and"
> -                         " rpu_keeplen %d is %d(over 128)",
> -                         rpu->rpu_uselen,
> -                         rpu->rpu_keeplen,
> -                         rpu->rpu_uselen + rpu->rpu_keeplen);
> -                     return 1;
> -             }
> -     }
> -     return 0;
> -}
> -
> -static void
> -do_use_prefix(int len, struct rr_pco_match *rpm,
> -           struct in6_rrenumreq *irr, int ifindex)
> -{
> -     struct rr_pco_use *rpu, *rpulim;
> -     struct rainfo *rai;
> -     struct prefix *pp;
> -
> -     rpu = (struct rr_pco_use *)(rpm + 1);
> -     rpulim = (struct rr_pco_use *)((char *)rpm + len);
> -
> -     if (rpu == rpulim) {    /* no use prefix */
> -             if (rpm->rpm_code == RPM_PCO_ADD)
> -                     return;
> -
> -             irr->irr_u_uselen = 0;
> -             irr->irr_u_keeplen = 0;
> -             irr->irr_raf_mask_onlink = 0;
> -             irr->irr_raf_mask_auto = 0;
> -             irr->irr_vltime = 0;
> -             irr->irr_pltime = 0;
> -             memset(&irr->irr_flags, 0, sizeof(irr->irr_flags));
> -             irr->irr_useprefix.sin6_len = 0; /* let it mean, no addition */
> -             irr->irr_useprefix.sin6_family = 0;
> -             irr->irr_useprefix.sin6_addr = in6addr_any;
> -             if (ioctl(s, rrcmd2pco[rpm->rpm_code], (caddr_t)irr) < 0 &&
> -                 errno != EADDRNOTAVAIL)
> -                     log_warn("ioctl");
> -             return;
> -     }
> -
> -     for (rpu = (struct rr_pco_use *)(rpm + 1),
> -          rpulim = (struct rr_pco_use *)((char *)rpm + len);
> -          rpu < rpulim;
> -          rpu += 1) {
> -             /* init in6_rrenumreq fields */
> -             irr->irr_u_uselen = rpu->rpu_uselen;
> -             irr->irr_u_keeplen = rpu->rpu_keeplen;
> -             irr->irr_raf_mask_onlink =
> -                     (rpu->rpu_ramask & ICMP6_RR_PCOUSE_RAFLAGS_ONLINK) == 0 
> ? 0 : 1;
> -             irr->irr_raf_mask_auto =
> -                     (rpu->rpu_ramask & ICMP6_RR_PCOUSE_RAFLAGS_AUTO) == 0 ? 
> 0 : 1;
> -             irr->irr_vltime = ntohl(rpu->rpu_vltime);
> -             irr->irr_pltime = ntohl(rpu->rpu_pltime);
> -             irr->irr_raf_onlink =
> -                     (rpu->rpu_raflags & ICMP6_RR_PCOUSE_RAFLAGS_ONLINK) == 
> 0 ? 0 : 1;
> -             irr->irr_raf_auto =
> -                     (rpu->rpu_raflags & ICMP6_RR_PCOUSE_RAFLAGS_AUTO) == 0 
> ? 0 : 1;
> -             irr->irr_rrf_decrvalid =
> -                     (rpu->rpu_flags & ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME) == 
> 0 ? 0 : 1;
> -             irr->irr_rrf_decrprefd =
> -                     (rpu->rpu_flags & ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME) == 
> 0 ? 0 : 1;
> -             irr->irr_useprefix.sin6_len = sizeof(irr->irr_useprefix);
> -             irr->irr_useprefix.sin6_family = AF_INET6;
> -             irr->irr_useprefix.sin6_addr = rpu->rpu_prefix;
> -
> -             if (ioctl(s, rrcmd2pco[rpm->rpm_code], (caddr_t)irr) < 0 &&
> -                 errno != EADDRNOTAVAIL)
> -                     log_warn("ioctl");
> -
> -             /* very adhoc: should be rewritten */
> -             if (rpm->rpm_code == RPM_PCO_CHANGE &&
> -                 IN6_ARE_ADDR_EQUAL(&rpm->rpm_prefix, &rpu->rpu_prefix) &&
> -                 rpm->rpm_matchlen == rpu->rpu_uselen &&
> -                 rpu->rpu_uselen == rpu->rpu_keeplen) {
> -                     if ((rai = if_indextorainfo(ifindex)) == NULL)
> -                             continue; /* non-advertising IF */
> -
> -                     TAILQ_FOREACH(pp, &rai->prefixes, entry) {
> -                             struct timeval now;
> -
> -                             if (prefix_match(&pp->prefix, pp->prefixlen,
> -                                              &rpm->rpm_prefix,
> -                                              rpm->rpm_matchlen)) {
> -                                     /* change parameters */
> -                                     pp->validlifetime = 
> ntohl(rpu->rpu_vltime);
> -                                     pp->preflifetime = 
> ntohl(rpu->rpu_pltime);
> -                                     if (irr->irr_rrf_decrvalid) {
> -                                             gettimeofday(&now, 0);
> -                                             pp->vltimeexpire =
> -                                                     now.tv_sec + 
> pp->validlifetime;
> -                                     } else
> -                                             pp->vltimeexpire = 0;
> -                                     if (irr->irr_rrf_decrprefd) {
> -                                             gettimeofday(&now, 0);
> -                                             pp->pltimeexpire =
> -                                                     now.tv_sec + 
> pp->preflifetime;
> -                                     } else
> -                                             pp->pltimeexpire = 0;
> -                             }
> -                     }
> -             }
> -     }
> -}
> -
> -/*
> - * process a Prefix Control Operation(PCO).
> - * return 0 on success, 1 on failure
> - */
> -static int
> -do_pco(struct icmp6_router_renum *rr, int len, struct rr_pco_match *rpm)
> -{
> -     int ifindex = 0;
> -     struct in6_rrenumreq irr;
> -
> -     if ((rr_pco_check(len, rpm) != 0))
> -             return 1;
> -
> -     if (s == -1 && (s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
> -             fatal("socket");
> -
> -     memset(&irr, 0, sizeof(irr));
> -     irr.irr_origin = PR_ORIG_RR;
> -     irr.irr_m_len = rpm->rpm_matchlen;
> -     irr.irr_m_minlen = rpm->rpm_minlen;
> -     irr.irr_m_maxlen = rpm->rpm_maxlen;
> -     irr.irr_matchprefix.sin6_len = sizeof(irr.irr_matchprefix);
> -     irr.irr_matchprefix.sin6_family = AF_INET6;
> -     irr.irr_matchprefix.sin6_addr = rpm->rpm_prefix;
> -
> -     while (if_indextoname(++ifindex, irr.irr_name)) {
> -             /*
> -              * if ICMP6_RR_FLAGS_FORCEAPPLY(A flag) is 0 and IFF_UP is off,
> -              * the interface is not applied
> -              */
> -             if ((rr->rr_flags & ICMP6_RR_FLAGS_FORCEAPPLY) == 0 &&
> -                 (iflist[ifindex]->ifm_flags & IFF_UP) == 0)
> -                     continue;
> -             /* TODO: interface scope check */
> -             do_use_prefix(len, rpm, &irr, ifindex);
> -     }
> -     if (errno == ENXIO)
> -             return 0;
> -     else if (errno) {
> -             log_warn("if_indextoname");
> -             return 1;
> -     }
> -     return 0;
> -}
> -
> -/*
> - * call do_pco() for each Prefix Control Operations(PCOs) in a received
> - * Router Renumbering Command packet.
> - * return 0 on success, 1 on failure
> - */
> -static int
> -do_rr(int len, struct icmp6_router_renum *rr)
> -{
> -     struct rr_pco_match *rpm;
> -     char *cp, *lim;
> -
> -     lim = (char *)rr + len;
> -     cp = (char *)(rr + 1);
> -     len -= sizeof(struct icmp6_router_renum);
> -
> -     /* get iflist block from kernel again, to get up-to-date information */
> -     init_iflist();
> -
> -     while (cp < lim) {
> -             int rpmlen;
> -
> -             rpm = (struct rr_pco_match *)cp;
> -             if (len < sizeof(struct rr_pco_match)) {
> -                 tooshort:
> -                     log_warnx("pkt too short. left len = %d. "
> -                         "garbage at end of pkt?", len);
> -                     return 1;
> -             }
> -             rpmlen = rpm->rpm_len << 3;
> -             if (len < rpmlen)
> -                     goto tooshort;
> -
> -             if (do_pco(rr, rpmlen, rpm)) {
> -                     log_warn("invalid PCO");
> -                     goto next;
> -             }
> -
> -         next:
> -             cp += rpmlen;
> -             len -= rpmlen;
> -     }
> -
> -     return 0;
> -}
> -
> -/*
> - * check validity of a router renumbering command packet
> - * return 0 on success, 1 on failure
> - */
> -static int
> -rr_command_check(int len, struct icmp6_router_renum *rr, struct in6_addr 
> *from,
> -              struct in6_addr *dst)
> -{
> -     u_char ntopbuf[INET6_ADDRSTRLEN];
> -
> -     /* omit rr minimal length check. hope kernel have done it. */
> -     /* rr_command length check */
> -     if (len < (sizeof(struct icmp6_router_renum) +
> -                sizeof(struct rr_pco_match))) {
> -             log_warnx("rr_command len %d is too short", len);
> -             return 1;
> -     }
> -
> -     /* destination check. only for multicast. omit unicast check. */
> -     if (IN6_IS_ADDR_MULTICAST(dst) && !IN6_IS_ADDR_MC_LINKLOCAL(dst) &&
> -         !IN6_IS_ADDR_MC_SITELOCAL(dst)) {
> -             log_warnx("dst mcast addr %s is illegal",
> -                 inet_ntop(AF_INET6, dst, ntopbuf, INET6_ADDRSTRLEN));
> -             return 1;
> -     }
> -
> -     /* seqnum and segnum check */
> -     if (rro.rro_seqnum > rr->rr_seqnum) {
> -             log_warnx("rcvd old seqnum %d from %s",
> -                 (u_int32_t)ntohl(rr->rr_seqnum),
> -                 inet_ntop(AF_INET6, from, ntopbuf, INET6_ADDRSTRLEN));
> -             return 1;
> -     }
> -     if (rro.rro_seqnum == rr->rr_seqnum &&
> -         (rr->rr_flags & ICMP6_RR_FLAGS_TEST) == 0 &&
> -         RR_ISSET_SEGNUM(rro.rro_segnum_bits, rr->rr_segnum)) {
> -             if ((rr->rr_flags & ICMP6_RR_FLAGS_REQRESULT) != 0)
> -                     log_warnx("rcvd duped segnum %d from %s",
> -                         rr->rr_segnum,
> -                         inet_ntop(AF_INET6, from, ntopbuf,
> -                             INET6_ADDRSTRLEN));
> -             return 0;
> -     }
> -
> -     /* update seqnum */
> -     if (rro.rro_seqnum != rr->rr_seqnum) {
> -             /* then must be "<" */
> -
> -             /* init rro_segnum_bits */
> -             memset(rro.rro_segnum_bits, 0,
> -                    sizeof(rro.rro_segnum_bits));
> -     }
> -     rro.rro_seqnum = rr->rr_seqnum;
> -
> -     return 0;
> -}
> -
> -static void
> -rr_command_input(int len, struct icmp6_router_renum *rr,
> -              struct in6_addr *from, struct in6_addr *dst)
> -{
> -     /* rr_command validity check */
> -     if (rr_command_check(len, rr, from, dst))
> -             goto failed;
> -     if ((rr->rr_flags & (ICMP6_RR_FLAGS_TEST|ICMP6_RR_FLAGS_REQRESULT)) ==
> -         ICMP6_RR_FLAGS_TEST)
> -             return;
> -
> -     /* do router renumbering */
> -     if (do_rr(len, rr)) {
> -             goto failed;
> -     }
> -
> -     /* update segnum */
> -     RR_SET_SEGNUM(rro.rro_segnum_bits, rr->rr_segnum);
> -
> -     return;
> -
> -    failed:
> -     log_warnx("received RR was invalid");
> -     return;
> -}
> -
> -void
> -rr_input(int len, struct icmp6_router_renum *rr, struct in6_pktinfo *pi,
> -      struct sockaddr_in6 *from, struct in6_addr *dst)
> -{
> -     u_char ntopbuf[2][INET6_ADDRSTRLEN], ifnamebuf[IFNAMSIZ];
> -
> -     log_debug("RR received from %s to %s on %s",
> -         inet_ntop(AF_INET6, &from->sin6_addr,
> -             ntopbuf[0], INET6_ADDRSTRLEN),
> -        inet_ntop(AF_INET6, &dst, ntopbuf[1], INET6_ADDRSTRLEN),
> -        if_indextoname(pi->ipi6_ifindex, ifnamebuf));
> -
> -     /* packet validation based on Section 4.1 of RFC2894 */
> -     if (len < sizeof(struct icmp6_router_renum)) {
> -             log_info("RR short message (size %d) from %s to %s on %s",
> -                 len,
> -                 inet_ntop(AF_INET6, &from->sin6_addr,
> -                     ntopbuf[0], INET6_ADDRSTRLEN),
> -                 inet_ntop(AF_INET6, &dst, ntopbuf[1], INET6_ADDRSTRLEN),
> -                 if_indextoname(pi->ipi6_ifindex, ifnamebuf));
> -             return;
> -     }
> -
> -     /*
> -      * If the IPv6 destination address is neither an All Routers multicast
> -      * address [AARCH] nor one of the receiving router's unicast addresses,
> -      * the message MUST be discarded and SHOULD be logged to network
> -      * management.
> -      * We rely on the kernel input routine for unicast addresses, and thus
> -      * check multicast destinations only.
> -      */
> -     if (IN6_IS_ADDR_MULTICAST(&pi->ipi6_addr) &&
> -         !IN6_ARE_ADDR_EQUAL(&in6a_site_allrouters, &pi->ipi6_addr)) {
> -             log_info("RR message with invalid destination (%s) "
> -                 "from %s on %s",
> -                 inet_ntop(AF_INET6, &dst, ntopbuf[0], INET6_ADDRSTRLEN),
> -                 inet_ntop(AF_INET6, &from->sin6_addr,
> -                     ntopbuf[1], INET6_ADDRSTRLEN),
> -                 if_indextoname(pi->ipi6_ifindex, ifnamebuf));
> -             return;
> -     }
> -
> -     rr_rcvifindex = pi->ipi6_ifindex;
> -
> -     switch (rr->rr_code) {
> -     case ICMP6_ROUTER_RENUMBERING_COMMAND:
> -             rr_command_input(len, rr, &from->sin6_addr, dst);
> -             /* TODO: send reply msg */
> -             break;
> -     case ICMP6_ROUTER_RENUMBERING_RESULT:
> -             /* RESULT will be processed by rrenumd */
> -             break;
> -     case ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET:
> -             /* TODO: sequence number reset */
> -             break;
> -     default:
> -             log_warnx("received unknown code %d", rr->rr_code);
> -             break;
> -
> -     }
> -
> -     return;
> -}
> Index: rrenum.h
> ===================================================================
> RCS file: rrenum.h
> diff -N rrenum.h
> --- rrenum.h  17 Feb 2002 19:42:39 -0000      1.5
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,34 +0,0 @@
> -/*   $OpenBSD: rrenum.h,v 1.5 2002/02/17 19:42:39 millert Exp $      */
> -/*   $KAME: rrenum.h,v 1.3 2001/01/21 15:37:14 itojun Exp $  */
> -
> -/*
> - * Copyright (C) 1998 WIDE Project.
> - * All rights reserved.
> - * 
> - * Redistribution and use in source and binary forms, with or without
> - * modification, are permitted provided that the following conditions
> - * are met:
> - * 1. Redistributions of source code must retain the above copyright
> - *    notice, this list of conditions and the following disclaimer.
> - * 2. Redistributions in binary form must reproduce the above copyright
> - *    notice, this list of conditions and the following disclaimer in the
> - *    documentation and/or other materials provided with the distribution.
> - * 3. Neither the name of the project nor the names of its contributors
> - *    may be used to endorse or promote products derived from this software
> - *    without specific prior written permission.
> - * 
> - * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
> - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> - * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
> - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> - * SUCH DAMAGE.
> - */
> -
> -void rr_input(int, struct icmp6_router_renum *, struct in6_pktinfo *,
> -    struct sockaddr_in6 *, struct in6_addr *);
> Index: rtadvd.8
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rtadvd/rtadvd.8,v
> retrieving revision 1.32
> diff -u -p -r1.32 rtadvd.8
> --- rtadvd.8  25 Oct 2015 21:23:42 -0000      1.32
> +++ rtadvd.8  30 Nov 2015 18:55:25 -0000
> @@ -36,7 +36,7 @@
>  .Nd router advertisement daemon
>  .Sh SYNOPSIS
>  .Nm
> -.Op Fl dMRs
> +.Op Fl ds
>  .Op Fl c Ar configfile
>  .Ar interface ...
>  .Sh DESCRIPTION
> @@ -101,30 +101,10 @@ If this option is specified,
>  .Nm
>  will run in the foreground and log to
>  .Em stderr .
> -.It Fl M
> -Specify an interface to join the all-routers site-local multicast group.
> -By default,
> -.Nm
> -tries to join the first advertising interface appearing on the command
> -line.
> -This option has meaning only with the
> -.Fl R
> -option, which enables routing renumbering protocol support.
>  .\".It Fl m
>  .\"Enables Mobile IPv6 support.
>  .\"This changes the content of router advertisement option, as well as
>  .\"permitted configuration directives.
> -.It Fl R
> -Accept router renumbering requests.
> -If you enable it, an
> -.Xr ipsec 4
> -setup is suggested for security reasons.
> -.\"On KAME-based systems,
> -.\".Xr rrenumd 8
> -.\"generates router renumbering request packets.
> -This option is currently disabled, and is ignored by
> -.Nm
> -with a warning message.
>  .It Fl s
>  Do not add or delete prefixes dynamically.
>  Only statically configured prefixes, if any, will be advertised.
> Index: rtadvd.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rtadvd/rtadvd.c,v
> retrieving revision 1.58
> diff -u -p -r1.58 rtadvd.c
> --- rtadvd.c  25 Oct 2015 22:11:34 -0000      1.58
> +++ rtadvd.c  30 Nov 2015 18:55:25 -0000
> @@ -58,7 +58,6 @@
>  #include <pwd.h>
>  
>  #include "rtadvd.h"
> -#include "rrenum.h"
>  #include "advcap.h"
>  #include "timer.h"
>  #include "if.h"
> @@ -78,11 +77,8 @@ struct iovec rcviov[2];
>  struct iovec sndiov[2];
>  struct sockaddr_in6 from;
>  struct sockaddr_in6 sin6_allnodes = {sizeof(sin6_allnodes), AF_INET6};
> -struct in6_addr in6a_site_allrouters;
> -static char *mcastif;
>  int sock;
>  int rtsock = -1;
> -int accept_rr = 0;
>  int dflag = 0, sflag = 0;
>  int log_perror = 0;
>  
> @@ -166,7 +162,7 @@ main(int argc, char *argv[])
>       closefrom(3);
>  
>       /* get command line options and arguments */
> -#define OPTIONS "c:dM:Rs"
> +#define OPTIONS "c:ds"
>       while ((ch = getopt(argc, argv, OPTIONS)) != -1) {
>  #undef OPTIONS
>               switch (ch) {
> @@ -176,15 +172,6 @@ main(int argc, char *argv[])
>               case 'd':
>                       dflag = 1;
>                       break;
> -             case 'M':
> -                     mcastif = optarg;
> -                     break;
> -             case 'R':
> -                     fprintf(stderr, "rtadvd: "
> -                             "the -R option is currently ignored.\n");
> -                     /* accept_rr = 1; */
> -                     /* run anyway... */
> -                     break;
>               case 's':
>                       sflag = 1;
>                       break;
> @@ -194,7 +181,7 @@ main(int argc, char *argv[])
>       argv += optind;
>       if (argc == 0) {
>               fprintf(stderr,
> -                     "usage: rtadvd [-dMRs] [-c configfile] "
> +                     "usage: rtadvd [-ds] [-c configfile] "
>                       "interface ...\n");
>               exit(1);
>       }
> @@ -631,15 +618,6 @@ rtadvd_input(void)
>               }
>               ra_input(i, (struct nd_router_advert *)icp, pi, &from);
>               break;
> -     case ICMP6_ROUTER_RENUMBERING:
> -             if (accept_rr == 0) {
> -                     log_warnx("received a router renumbering "
> -                         "message, but not allowed to be accepted");
> -                     break;
> -             }
> -             rr_input(i, (struct icmp6_router_renum *)icp, pi, &from,
> -                      &dst);
> -             break;
>       default:
>               /*
>                * Note that this case is POSSIBLE, especially just
> @@ -1221,11 +1199,9 @@ sock_open(void)
>       ICMP6_FILTER_SETBLOCKALL(&filt);
>       ICMP6_FILTER_SETPASS(ND_ROUTER_SOLICIT, &filt);
>       ICMP6_FILTER_SETPASS(ND_ROUTER_ADVERT, &filt);
> -     if (accept_rr)
> -             ICMP6_FILTER_SETPASS(ICMP6_ROUTER_RENUMBERING, &filt);
>       if (setsockopt(sock, IPPROTO_ICMPV6, ICMP6_FILTER, &filt, sizeof(filt))
>           < 0)
> -             fatal("IICMP6_FILTER");
> +             fatal("ICMP6_FILTER");
>  
>       /*
>        * join all routers multicast address on each advertising interface.
> @@ -1244,31 +1220,6 @@ sock_open(void)
>  
>       ra = SLIST_FIRST(&ralist);
>  
> -     /*
> -      * When attending router renumbering, join all-routers site-local
> -      * multicast group. 
> -      */
> -     if (accept_rr) {
> -             if (inet_pton(AF_INET6, ALLROUTERS_SITE,
> -                 &in6a_site_allrouters) != 1)
> -                     fatal("inet_pton failed(library bug?)");
> -             mreq.ipv6mr_multiaddr = in6a_site_allrouters;
> -             if (mcastif) {
> -                     if ((mreq.ipv6mr_interface = if_nametoindex(mcastif))
> -                         == 0) {
> -                             log_warn("invalid interface: %s", mcastif);
> -                             exit(1);
> -                     }
> -             } else
> -                     mreq.ipv6mr_interface = ra->ifindex;
> -             if (setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq,
> -                 sizeof(mreq)) < 0) {
> -                     log_warn("IPV6_JOIN_GROUP(site) on %s", mcastif ?
> -                         mcastif : ra->ifname);
> -                     exit(1);
> -             }
> -     }
> -     
>       /* initialize msghdr for receiving packets */
>       rcviov[0].iov_base = (caddr_t)answer;
>       rcviov[0].iov_len = sizeof(answer);
> 
> 
> -- 
> jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE
> 

-- 
I'm not entirely sure you are real.

Reply via email to