Hello,

Patches 11 & 12.


# HG changeset patch
# User MJP
# Date 1452862954 -3600
#      Fri Jan 15 14:02:34 2016 +0100
# Node ID 5c95b08cdd4fa9db47ced3b8b1a331dbdab41ec6
# Parent  842c1c22848e171f174cc45ba7b961883fc3c184
Feature: Configure interface with the specified rdomain.

diff -r 842c1c22848e -r 5c95b08cdd4f usr.sbin/npppd/npppd/npppd_iface.c
--- usr.sbin/npppd/npppd/npppd_iface.c  Fri Jan 15 14:02:34 2016 +0100
+++ usr.sbin/npppd/npppd/npppd_iface.c  Fri Jan 15 14:02:34 2016 +0100
@@ -87,6 +87,7 @@
 #endif
 
 static void  npppd_iface_network_input(npppd_iface *, u_char *, int);
+static int   npppd_iface_setup_rdomain(npppd_iface *);
 static int   npppd_iface_setup_ip(npppd_iface *);
 static void  npppd_iface_io_event_handler (int, short, void *);
 static int   npppd_iface_log (npppd_iface *, int, const char *, ...)
@@ -111,15 +112,28 @@
        _this->using_pppx = iface->is_pppx;
        _this->set_ip4addr = 1;
        _this->ip4addr = iface->ip4addr;
+       _this->rdomain = iface->rdomain;
        _this->ipcpconf = iface->ipcpconf;
        _this->devf = -1;
        _this->initialized = 1;
 }
 
 static int
+npppd_iface_setup_rdomain(npppd_iface *_this)
+{
+       if (priv_set_if_rdomain(_this->ifname, _this->rdomain) != 0) {
+               npppd_iface_log(_this, LOG_ERR,
+                       "setting rdomain on %s failed: %m", _this->ifname);
+               return 1;
+       }
+
+       return 0;
+}
+
+static int
 npppd_iface_setup_ip(npppd_iface *_this)
 {
-       int sock, if_flags, changed;
+       int sock, if_flags, changed, old_rdomain;
        struct in_addr gw, assigned;
        struct sockaddr_in *sin0;
        struct ifreq ifr;
@@ -152,6 +166,17 @@
        if (assigned.s_addr != _this->ip4addr.s_addr)
                changed = 1;
 
+       /* get rdomain which was assigned to interface */
+       if (priv_get_if_rdomain(_this->ifname, &old_rdomain) != 0) {
+               log_printf(LOG_ERR, "ioctl(,SIOCGIFRDOMAIN) failed: %m", 
__func__);
+               goto fail;
+       }
+       if (_this->rdomain != old_rdomain) {
+               changed = 1;
+               if (npppd_iface_setup_rdomain(_this) != 0)
+                       goto fail;
+       }
+
        if (priv_get_if_flags(_this->ifname, &if_flags) != 0) {
                npppd_iface_log(_this, LOG_ERR,
                    "ioctl(,SIOCGIFFLAGS) failed: %m");
@@ -195,7 +220,7 @@
                /* erase old route */
                if (assigned.s_addr != 0) {
                        gw.s_addr = htonl(INADDR_LOOPBACK);
-                       in_host_route_delete(&assigned, &gw, _this->rdomain);
+                       in_host_route_delete(&assigned, &gw, old_rdomain);
                }
 
                assigned.s_addr = _this->ip4addr.s_addr;
@@ -252,9 +277,15 @@
        _this->ipcpconf = iface->ipcpconf;
        backup = _this->ip4addr;
        _this->ip4addr = iface->ip4addr;
+       _this->rdomain = iface->rdomain;
 
-       if (_this->using_pppx)
+       if (_this->using_pppx) {
+               /* ifconfig tun1 rdomain X */
+               if (npppd_iface_setup_rdomain(_this) != 0)
+                       return 1;
+
                return 0;
+       }
        if ((rval = npppd_iface_setup_ip(_this)) != 0)
                return rval;
 
@@ -312,6 +343,9 @@
        if (_this->using_pppx == 0) {
                if (npppd_iface_setup_ip(_this) != 0)
                        goto fail;
+       } else {
+               if (npppd_iface_setup_rdomain(_this) != 0)
+                       goto fail;
        }
 
 #ifdef USE_NPPPD_PIPEX


# HG changeset patch
# User MJP
# Date 1452862954 -3600
#      Fri Jan 15 14:02:34 2016 +0100
# Node ID 51e9ae42d8660dcf396d3781b01e70e837f57107
# Parent  5c95b08cdd4fa9db47ced3b8b1a331dbdab41ec6
Documentation: Update the manual page (interface [rdomain]).

diff -r 5c95b08cdd4f -r 51e9ae42d866 usr.sbin/npppd/npppd/npppd.conf.5
--- usr.sbin/npppd/npppd/npppd.conf.5   Fri Jan 15 14:02:34 2016 +0100
+++ usr.sbin/npppd/npppd/npppd.conf.5   Fri Jan 15 14:02:34 2016 +0100
@@ -520,7 +520,7 @@
 .Ic interface
 setting is described below:
 .Pp
-.Ic interface Ar ifname Ic address Ar address Ic ipcp Ar ipcp
+.Ic interface Ar ifname Ic address Ar address Ic ipcp Ar ipcp Op Ic rdomain Ar 
rdomainid
 .Pp
 Use
 .Xr tun 4

Reply via email to