[RFC] script for binding ARP <-> IP pairs

View: New views
16 Messages — Rating Filter:   Alert me  

[RFC] script for binding ARP <-> IP pairs

by Xin LI-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Here is a new rc.d startup script, which helps to bind static ARP
entries like this:

        static_arp_pairs="gw"
        arp_gw="172.16.1.254 00:1c:58:6a:7a:4c"

At the beginning I was inclined to add an "options" part for this script
which helps to set e.g. logging options for ARP but it looks that these
would be redundant, i.e., can be done with easy /etc/sysctl.conf.

Comments?

Cheers,
- --
Xin LI <delphij@...> http://www.delphij.net/
FreeBSD - The Power to Serve!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (FreeBSD)

iEYEARECAAYFAkp7J5IACgkQi+vbBBjt66Du7QCePX+p8F8u6i/4mCGW+I//eFBu
O7oAn2TdLvcH9TFHR1bY3zKlJ8NTAJx4
=OAHW
-----END PGP SIGNATURE-----

#!/bin/sh
#
# Copyright (c) 2009  Xin LI <delphij@...>
# 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.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
#
# Configure static ARP table
#
# $FreeBSD$
#

# PROVIDE: arp
# REQUIRE: netif
# KEYWORD: nojail

. /etc/rc.subr

name="arp"
start_cmd="arp_start"
stop_cmd="arp_stop"

arp_start()
{
        if [ -n "${static_arp_pairs}" ]; then
                echo -n 'Binding static ARP pair:'
                for e in ${static_arp_pairs}; do
                        echo -n " ${e}"
                        eval arp_args=\$arp_${e}
                        arp -S ${arp_args} >/dev/null 2>&1
                done
                echo '.'
        fi
}

arp_stop()
{
        if [ -n "${static_arp_pairs}" ]; then
                echo -n 'Unbinding static ARP pair:'
                for e in ${static_arp_pairs}; do
                        echo -n " ${e}"
                        eval arp_args=\$arp_${e}
                        arp_args=`echo ${arp_args} | sed -e s,..:..:..:..:..:..,,g`
                        arp -d ${arp_args} >/dev/null 2>&1
                done
                echo '.'
        fi
}

load_rc_config $name
run_rc_command "$1"

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Doug Barton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Xin LI wrote:

> Hi,
>
> Here is a new rc.d startup script, which helps to bind static ARP
> entries like this:
>
> static_arp_pairs="gw"
> arp_gw="172.16.1.254 00:1c:58:6a:7a:4c"
>
> At the beginning I was inclined to add an "options" part for this script
> which helps to set e.g. logging options for ARP but it looks that these
> would be redundant, i.e., can be done with easy /etc/sysctl.conf.
>
> Comments?

This looks pretty good. My only suggestion would be to change the file
name, $name and PROVIDE to static_arp (and then in your example above
the second var would be static_arp_gw). I realize that currently we
have a non-trivial number of legacy variables that don't match their
related script names and/or $name, however going forward my preference
would be that we not add any more examples of this. I also think it's
a bit more descriptive of what you're doing in the script.


hth,

Doug
_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Xin LI-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi, Doug,

Doug Barton wrote:

> Xin LI wrote:
>> Hi,
>>
>> Here is a new rc.d startup script, which helps to bind static ARP
>> entries like this:
>>
>> static_arp_pairs="gw"
>> arp_gw="172.16.1.254 00:1c:58:6a:7a:4c"
>>
>> At the beginning I was inclined to add an "options" part for this script
>> which helps to set e.g. logging options for ARP but it looks that these
>> would be redundant, i.e., can be done with easy /etc/sysctl.conf.
>>
>> Comments?
>
> This looks pretty good. My only suggestion would be to change the file
> name, $name and PROVIDE to static_arp (and then in your example above
> the second var would be static_arp_gw). I realize that currently we
> have a non-trivial number of legacy variables that don't match their
> related script names and/or $name, however going forward my preference
> would be that we not add any more examples of this. I also think it's
> a bit more descriptive of what you're doing in the script.
Thanks for your comments, I have put together the revised patch, along
with rc.conf.5 and defaults/rc.conf changes.

Cheers,
--
Xin LI <delphij@...> http://www.delphij.net/
FreeBSD - The Power to Serve!

Index: etc/defaults/rc.conf
===================================================================
--- etc/defaults/rc.conf (revision 196086)
+++ etc/defaults/rc.conf (working copy)
@@ -357,6 +357,7 @@
 
 ### Network routing options: ###
 defaultrouter="NO" # Set to default gateway (or NO).
+static_arp_pairs="" # Set to static ARP list (or leave empty).
 static_routes="" # Set to static route list (or leave empty).
 natm_static_routes="" # Set to static route list for NATM (or leave empty).
 gateway_enable="NO" # Set to YES if this host will be a gateway.
Index: etc/rc.d/Makefile
===================================================================
--- etc/rc.d/Makefile (revision 196086)
+++ etc/rc.d/Makefile (working copy)
@@ -32,7 +32,7 @@
  random rarpd resolv rfcomm_pppd_server root \
  route6d routed routing rpcbind rtadvd rwho \
  savecore sdpd securelevel sendmail \
- serial sppp statd swap1 \
+ serial static_arp sppp statd swap1 \
  syscons sysctl syslogd \
  timed tmp \
  ugidfw \
Index: etc/rc.d/static_arp
===================================================================
--- etc/rc.d/static_arp (revision 0)
+++ etc/rc.d/static_arp (revision 0)
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# Copyright (c) 2009  Xin LI <delphij@...>
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# Configure static ARP table
+#
+# $FreeBSD$
+#
+
+# PROVIDE: static_arp
+# REQUIRE: netif
+# KEYWORD: nojail
+
+. /etc/rc.subr
+
+name="static_arp"
+start_cmd="static_arp_start"
+stop_cmd="static_arp_stop"
+
+static_arp_start()
+{
+ if [ -n "${static_arp_pairs}" ]; then
+ echo -n 'Binding static ARP pair:'
+ for e in ${static_arp_pairs}; do
+ echo -n " ${e}"
+ eval arp_args=\$arp_${e}
+ arp -S ${arp_args} >/dev/null 2>&1
+ done
+ echo '.'
+ fi
+}
+
+static_arp_stop()
+{
+ if [ -n "${static_arp_pairs}" ]; then
+ echo -n 'Unbinding static ARP pair:'
+ for e in ${static_arp_pairs}; do
+ echo -n " ${e}"
+ eval arp_args=\$arp_${e}
+ arp_args=`echo ${arp_args} | sed -e s,..:..:..:..:..:..,,g`
+ arp -d ${arp_args} >/dev/null 2>&1
+ done
+ echo '.'
+ fi
+}
+
+load_rc_config $name
+run_rc_command "$1"
Index: share/man/man5/rc.conf.5
===================================================================
--- share/man/man5/rc.conf.5 (revision 196086)
+++ share/man/man5/rc.conf.5 (working copy)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 10, 2009
+.Dd August 10, 2009
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -2227,6 +2227,23 @@
 .Pq Vt str
 The IPv6 equivalent of
 .Va defaultrouter .
+.It Va static_arp_pairs
+.Pq Vt str
+Set to the list of static ARP paris that are to be added at system
+boot time.
+For each whitespace separated
+.Ar element
+in the value, a
+.Va
+arp_ Ns Aq Ar element
+variable is assumed to exist whose contents will later be passed to a
+.Dq Nm arp Cm -S
+operation.
+For example
+.Bd -literal
+static_arp_pairs="gw"
+arp_gw="192.168.1.1 00:01:02:03:04:05"
+.Ed
 .It Va static_routes
 .Pq Vt str
 Set to the list of static routes that are to be added at system

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Doug Barton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Xin LI wrote:

> Thanks for your comments, I have put together the revised patch, along
> with rc.conf.5 and defaults/rc.conf changes.

Glad to help. This looks fine except that you need an entry for
static_arp_enable in defaults rc.conf and rc.conf.5.

Once you get that into the patch I would send it to -net for a final
review, then ask re@ to commit it. Since this is off by default and
affects only a small group of users I don't see any reason we can't
add it, even at this late date.


Doug

--

    This .signature sanitized for your protection

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Xin LI-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi, Doug,

Doug Barton wrote:
> Xin LI wrote:
>
>> Thanks for your comments, I have put together the revised patch, along
>> with rc.conf.5 and defaults/rc.conf changes.
>
> Glad to help. This looks fine except that you need an entry for
> static_arp_enable in defaults rc.conf and rc.conf.5.

This script does not require the enable knob.  If the static_arp_pairs
is not empty then the script would add the entries, otherwise it will
not do that.  Do you think we need an "enable" knob for it?  I can add
it but I don't feel strongly for the idea, since it would make a
redundant entry to represent the same semantic.

Cheers,
--
Xin LI <delphij@...> http://www.delphij.net/
FreeBSD - The Power to Serve!
_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Doug Barton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Sun, 9 Aug 2009, Xin LI wrote:

> Hi, Doug,
>
> Doug Barton wrote:
>> Xin LI wrote:
>>
>>> Thanks for your comments, I have put together the revised patch, along
>>> with rc.conf.5 and defaults/rc.conf changes.
>>
>> Glad to help. This looks fine except that you need an entry for
>> static_arp_enable in defaults rc.conf and rc.conf.5.
>
> This script does not require the enable knob.  If the static_arp_pairs
> is not empty then the script would add the entries, otherwise it will
> not do that.  Do you think we need an "enable" knob for it?  I can add
> it but I don't feel strongly for the idea, since it would make a
> redundant entry to represent the same semantic.

I missed the fact that you're not using rcvar. I'm sort of ambivalent
about that, as I prefer things to be consistent, but I'm not actively
opposed to it. If no one else has an objection go ahead and send it to
-net.


Doug

--

     This .signature sanitized for your protection

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Adrian Penisoara :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

On Mon, Aug 10, 2009 at 7:34 AM, Doug Barton <dougb@...> wrote:

> On Sun, 9 Aug 2009, Xin LI wrote:
>
>  Hi, Doug,
>>
>> Doug Barton wrote:
>>
>>> Xin LI wrote:
>>>
>>>  Thanks for your comments, I have put together the revised patch, along
>>>> with rc.conf.5 and defaults/rc.conf changes.
>>>>
>>>
>>> Glad to help. This looks fine except that you need an entry for
>>> static_arp_enable in defaults rc.conf and rc.conf.5.
>>>
>>
>> This script does not require the enable knob.  If the static_arp_pairs
>> is not empty then the script would add the entries, otherwise it will
>> not do that.  Do you think we need an "enable" knob for it?  I can add
>> it but I don't feel strongly for the idea, since it would make a
>> redundant entry to represent the same semantic.
>>
>
> I missed the fact that you're not using rcvar. I'm sort of ambivalent about
> that, as I prefer things to be


I guess you could compare this to the cloned_interfaces rcvar...


> consistent, but I'm not actively opposed to it. If no one else has an
> objection go ahead and send it to -net.
>

Just a bit of QC/improvement:

Index: etc/rc.d/static_arp
===================================================================
-               echo -n 'Binding static ARP pair:'
+               echo -n 'Binding static ARP pair(s):'

-                       arp_args=`echo ${arp_args} | sed -e
s,..:..:..:..:..:..,,g`
+                       arp_args=`echo ${arp_args} | awk '{ print $1 }'`


Index: share/man/man5/rc.conf.5
===================================================================
-Set to the list of static ARP paris that are to be added at system
+Set to the list of static ARP pairs that are to be added at system


Regards,
Adrian Penisoara
EnterpriseBSD
_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Xin LI-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi, Adrian,

Adrian Penisoara wrote:
[...]
> Just a bit of QC/improvement:
>
> Index: etc/rc.d/static_arp
> ===================================================================
> -               echo -n 'Binding static ARP pair:'
> +               echo -n 'Binding static ARP pair(s):'

Thanks, I have changed both.

> -                       arp_args=`echo ${arp_args} | sed -e
> s,..:..:..:..:..:..,,g`
> +                       arp_args=`echo ${arp_args} | awk '{ print $1 }'`

After carefully reading the sh(1) manual, I find another way which does
not need to use any sed/awk at all:

        arp -d ${arp_args%%[ ]*} > /dev/null 2>&1

> Index: share/man/man5/rc.conf.5
> ===================================================================
> -Set to the list of static ARP paris that are to be added at system
> +Set to the list of static ARP pairs that are to be added at system

Thanks, changed in the patch.

Here is the revised patch based on your comments.

Cheers,
- --
Xin LI <delphij@...> http://www.delphij.net/
FreeBSD - The Power to Serve!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (FreeBSD)

iEYEARECAAYFAkqAbRYACgkQi+vbBBjt66ADfwCgp79vVw0kMv1qYYc7Lmjkwn6s
FEAAnjjOxHVBifAKpbnnU01XOZynij6W
=P5jW
-----END PGP SIGNATURE-----

Index: etc/defaults/rc.conf
===================================================================
--- etc/defaults/rc.conf (revision 196086)
+++ etc/defaults/rc.conf (working copy)
@@ -357,6 +357,7 @@
 
 ### Network routing options: ###
 defaultrouter="NO" # Set to default gateway (or NO).
+static_arp_pairs="" # Set to static ARP list (or leave empty).
 static_routes="" # Set to static route list (or leave empty).
 natm_static_routes="" # Set to static route list for NATM (or leave empty).
 gateway_enable="NO" # Set to YES if this host will be a gateway.
Index: etc/rc.d/Makefile
===================================================================
--- etc/rc.d/Makefile (revision 196086)
+++ etc/rc.d/Makefile (working copy)
@@ -32,7 +32,7 @@
  random rarpd resolv rfcomm_pppd_server root \
  route6d routed routing rpcbind rtadvd rwho \
  savecore sdpd securelevel sendmail \
- serial sppp statd swap1 \
+ serial static_arp sppp statd swap1 \
  syscons sysctl syslogd \
  timed tmp \
  ugidfw \
Index: etc/rc.d/static_arp
===================================================================
--- etc/rc.d/static_arp (revision 0)
+++ etc/rc.d/static_arp (revision 0)
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Copyright (c) 2009  Xin LI <delphij@...>
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# Configure static ARP table
+#
+# $FreeBSD$
+#
+
+# PROVIDE: static_arp
+# REQUIRE: netif
+# KEYWORD: nojail
+
+. /etc/rc.subr
+
+name="static_arp"
+start_cmd="static_arp_start"
+stop_cmd="static_arp_stop"
+
+static_arp_start()
+{
+ if [ -n "${static_arp_pairs}" ]; then
+ echo -n 'Binding static ARP pair(s):'
+ for e in ${static_arp_pairs}; do
+ echo -n " ${e}"
+ eval arp_args=\$arp_${e}
+ arp -S ${arp_args} >/dev/null 2>&1
+ done
+ echo '.'
+ fi
+}
+
+static_arp_stop()
+{
+ if [ -n "${static_arp_pairs}" ]; then
+ echo -n 'Unbinding static ARP pair(s):'
+ for e in ${static_arp_pairs}; do
+ echo -n " ${e}"
+ eval arp_args=\$arp_${e}
+ arp -d ${arp_args%%[ ]*} > /dev/null 2>&1
+ done
+ echo '.'
+ fi
+}
+
+load_rc_config $name
+run_rc_command "$1"
Index: share/man/man5/rc.conf.5
===================================================================
--- share/man/man5/rc.conf.5 (revision 196086)
+++ share/man/man5/rc.conf.5 (working copy)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 10, 2009
+.Dd August 10, 2009
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -2227,6 +2227,23 @@
 .Pq Vt str
 The IPv6 equivalent of
 .Va defaultrouter .
+.It Va static_arp_pairs
+.Pq Vt str
+Set to the list of static ARP pairs that are to be added at system
+boot time.
+For each whitespace separated
+.Ar element
+in the value, a
+.Va
+arp_ Ns Aq Ar element
+variable is assumed to exist whose contents will later be passed to a
+.Dq Nm arp Cm -S
+operation.
+For example
+.Bd -literal
+static_arp_pairs="gw"
+arp_gw="192.168.1.1 00:01:02:03:04:05"
+.Ed
 .It Va static_routes
 .Pq Vt str
 Set to the list of static routes that are to be added at system

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Adrian Penisoara :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

On Mon, Aug 10, 2009 at 8:13 PM, Adrian Penisoara <ady@...>wrote:

> Hi,
>
> On Mon, Aug 10, 2009 at 7:34 AM, Doug Barton <dougb@...> wrote:
>
>> On Sun, 9 Aug 2009, Xin LI wrote:
>>
>>  Hi, Doug,
>>>
>>> Doug Barton wrote:
>>>
>>>> Xin LI wrote:
>>>>
>>>>  Thanks for your comments, I have put together the revised patch, along
>>>>> with rc.conf.5 and defaults/rc.conf changes.
>>>>>
>>>>
>>>> Glad to help. This looks fine except that you need an entry for
>>>> static_arp_enable in defaults rc.conf and rc.conf.5.
>>>>
>>>
>>> This script does not require the enable knob.  If the static_arp_pairs
>>> is not empty then the script would add the entries, otherwise it will
>>> not do that.  Do you think we need an "enable" knob for it?  I can add
>>> it but I don't feel strongly for the idea, since it would make a
>>> redundant entry to represent the same semantic.
>>>
>>
>> I missed the fact that you're not using rcvar. I'm sort of ambivalent
>> about that, as I prefer things to be
>
>
> I guess you could compare this to the cloned_interfaces rcvar...
>
>

I stand corrected: it's rather more similar to the "static_routes /
route_xxx" concept. I guess we have an entire class of such rc subroutines
which are not $name_enable'd.

Regards,
Adrian.
_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Xin LI-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Any objections for the attached patch?  I'll commit this version if
everybody is happy with it and then see if re@ would approve it for
8.0-RELEASE.

Cheers,
- --
Xin LI <delphij@...> http://www.delphij.net/
FreeBSD - The Power to Serve!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (FreeBSD)

iEYEARECAAYFAkqTMpQACgkQi+vbBBjt66CoRQCgwRQaFjKsZE8+jj/CXGdl0I8n
74oAn0ptg/pwgHSDmw9iUbQcEXlJULhu
=UvH8
-----END PGP SIGNATURE-----

Index: etc/defaults/rc.conf
===================================================================
--- etc/defaults/rc.conf (revision 196516)
+++ etc/defaults/rc.conf (working copy)
@@ -357,6 +357,7 @@
 
 ### Network routing options: ###
 defaultrouter="NO" # Set to default gateway (or NO).
+static_arp_pairs="" # Set to static ARP list (or leave empty).
 static_routes="" # Set to static route list (or leave empty).
 natm_static_routes="" # Set to static route list for NATM (or leave empty).
 gateway_enable="NO" # Set to YES if this host will be a gateway.
Index: etc/rc.d/Makefile
===================================================================
--- etc/rc.d/Makefile (revision 196516)
+++ etc/rc.d/Makefile (working copy)
@@ -32,7 +32,7 @@
  random rarpd resolv rfcomm_pppd_server root \
  route6d routed routing rpcbind rtadvd rwho \
  savecore sdpd securelevel sendmail \
- serial sppp statd swap1 \
+ serial sppp statd static_arp swap1 \
  syscons sysctl syslogd \
  timed tmp \
  ugidfw \
Index: etc/rc.d/static_arp
===================================================================
--- etc/rc.d/static_arp (revision 0)
+++ etc/rc.d/static_arp (revision 0)
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Copyright (c) 2009  Xin LI <delphij@...>
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# Configure static ARP table
+#
+# $FreeBSD$
+#
+
+# PROVIDE: static_arp
+# REQUIRE: netif
+# KEYWORD: nojail
+
+. /etc/rc.subr
+
+name="static_arp"
+start_cmd="static_arp_start"
+stop_cmd="static_arp_stop"
+
+static_arp_start()
+{
+ if [ -n "${static_arp_pairs}" ]; then
+ echo -n 'Binding static ARP pair(s):'
+ for e in ${static_arp_pairs}; do
+ echo -n " ${e}"
+ eval arp_args=\$arp_${e}
+ arp -S ${arp_args} >/dev/null 2>&1
+ done
+ echo '.'
+ fi
+}
+
+static_arp_stop()
+{
+ if [ -n "${static_arp_pairs}" ]; then
+ echo -n 'Unbinding static ARP pair(s):'
+ for e in ${static_arp_pairs}; do
+ echo -n " ${e}"
+ eval arp_args=\$arp_${e}
+ arp -d ${arp_args%%[ ]*} > /dev/null 2>&1
+ done
+ echo '.'
+ fi
+}
+
+load_rc_config $name
+run_rc_command "$1"
Index: share/man/man5/rc.conf.5
===================================================================
--- share/man/man5/rc.conf.5 (revision 196516)
+++ share/man/man5/rc.conf.5 (working copy)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 10, 2009
+.Dd August 10, 2009
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -2227,6 +2227,23 @@
 .Pq Vt str
 The IPv6 equivalent of
 .Va defaultrouter .
+.It Va static_arp_pairs
+.Pq Vt str
+Set to the list of static ARP pairs that are to be added at system
+boot time.
+For each whitespace separated
+.Ar element
+in the value, a
+.Va
+arp_ Ns Aq Ar element
+variable is assumed to exist whose contents will later be passed to a
+.Dq Nm arp Cm -S
+operation.
+For example
+.Bd -literal
+static_arp_pairs="gw"
+arp_gw="192.168.1.1 00:01:02:03:04:05"
+.Ed
 .It Va static_routes
 .Pq Vt str
 Set to the list of static routes that are to be added at system

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Doug Barton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Xin LI wrote:
> Any objections for the attached patch?  I'll commit this version if
> everybody is happy with it and then see if re@ would approve it for
> 8.0-RELEASE.

Sorry if I wasn't clear before, but all of the rc.conf variables
should be prepended with static_arp_ (as opposed to just arp_). So
rather than arp_args you'd want static_arp_args. I realize you're not
using set_rcvar() but it's still a good idea to do that for
consistency's sake, as well as to make it easier for admins to sort
stuff, etc. Please make sure you change that in the man page as well.

Other than that it looks fine to me.

Silly question that I'm sorry just occurred to me right now, have you
tested this with IPv6? :)


Doug

--

    This .signature sanitized for your protection

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by hrs :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Doug Barton <dougb@...> wrote
  in <4A93351E.2020107@...>:

do> Xin LI wrote:
do> > Any objections for the attached patch?  I'll commit this version if
do> > everybody is happy with it and then see if re@ would approve it for
do> > 8.0-RELEASE.
do>
do> Sorry if I wasn't clear before, but all of the rc.conf variables
do> should be prepended with static_arp_ (as opposed to just arp_). So
do> rather than arp_args you'd want static_arp_args. I realize you're not
do> using set_rcvar() but it's still a good idea to do that for
do> consistency's sake, as well as to make it easier for admins to sort
do> stuff, etc. Please make sure you change that in the man page as well.

 I agree with this.

do> Silly question that I'm sorry just occurred to me right now, have you
do> tested this with IPv6? :)

 IPv6 uses NDP (see ndp(8)), not ARP, so no consideration is needed
 for $static_arp_* variables at least.

-- Hiroki


attachment0 (202 bytes) Download Attachment

Re: [RFC] script for binding ARP <-> IP pairs

by Xin LI-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Doug Barton wrote:

> Xin LI wrote:
>> Any objections for the attached patch?  I'll commit this version if
>> everybody is happy with it and then see if re@ would approve it for
>> 8.0-RELEASE.
>
> Sorry if I wasn't clear before, but all of the rc.conf variables
> should be prepended with static_arp_ (as opposed to just arp_). So
> rather than arp_args you'd want static_arp_args. I realize you're not
> using set_rcvar() but it's still a good idea to do that for
> consistency's sake, as well as to make it easier for admins to sort
> stuff, etc. Please make sure you change that in the man page as well.
I see.  I have corrected arp_ prefixes to static_arp_ prefixes.  Note
that "arp_args" are not changed because they are intermediate variables
that are intended as "arp(1) arguments".  I have marked these as local.

> Other than that it looks fine to me.
>
> Silly question that I'm sorry just occurred to me right now, have you
> tested this with IPv6? :)

I think IPv6 would need to use "ndp" instead (cross referenced from
arp(8)) but am not sure.  Because the script rely on space or tab as
separator I think it would just work after a simple s/arp/ndp/g for ndp
but I don't have a local production IPv6 network for the test...

Cheers,
- --
Xin LI <delphij@...> http://www.delphij.net/
FreeBSD - The Power to Serve!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (FreeBSD)

iEYEARECAAYFAkqTO3cACgkQi+vbBBjt66CtWwCZARUOgOP3AoZEEEeCCXl9ziVT
ZwsAoIC1cmv6d0QY7z1RjEoFcfz0Sey/
=py3J
-----END PGP SIGNATURE-----

Index: etc/defaults/rc.conf
===================================================================
--- etc/defaults/rc.conf (revision 196516)
+++ etc/defaults/rc.conf (working copy)
@@ -357,6 +357,7 @@
 
 ### Network routing options: ###
 defaultrouter="NO" # Set to default gateway (or NO).
+static_arp_pairs="" # Set to static ARP list (or leave empty).
 static_routes="" # Set to static route list (or leave empty).
 natm_static_routes="" # Set to static route list for NATM (or leave empty).
 gateway_enable="NO" # Set to YES if this host will be a gateway.
Index: etc/rc.d/Makefile
===================================================================
--- etc/rc.d/Makefile (revision 196516)
+++ etc/rc.d/Makefile (working copy)
@@ -32,7 +32,7 @@
  random rarpd resolv rfcomm_pppd_server root \
  route6d routed routing rpcbind rtadvd rwho \
  savecore sdpd securelevel sendmail \
- serial sppp statd swap1 \
+ serial sppp statd static_arp swap1 \
  syscons sysctl syslogd \
  timed tmp \
  ugidfw \
Index: etc/rc.d/static_arp
===================================================================
--- etc/rc.d/static_arp (revision 0)
+++ etc/rc.d/static_arp (revision 0)
@@ -0,0 +1,71 @@
+#!/bin/sh
+#
+# Copyright (c) 2009  Xin LI <delphij@...>
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# Configure static ARP table
+#
+# $FreeBSD$
+#
+
+# PROVIDE: static_arp
+# REQUIRE: netif
+# KEYWORD: nojail
+
+. /etc/rc.subr
+
+name="static_arp"
+start_cmd="static_arp_start"
+stop_cmd="static_arp_stop"
+
+static_arp_start()
+{
+ if [ -n "${static_arp_pairs}" ]; then
+ echo -n 'Binding static ARP pair(s):'
+ for e in ${static_arp_pairs}; do
+ local arp_args
+ echo -n " ${e}"
+ eval arp_args=\$static_arp_${e}
+ arp -S ${arp_args} >/dev/null 2>&1
+ done
+ echo '.'
+ fi
+}
+
+static_arp_stop()
+{
+ if [ -n "${static_arp_pairs}" ]; then
+ echo -n 'Unbinding static ARP pair(s):'
+ for e in ${static_arp_pairs}; do
+ local arp_args
+ echo -n " ${e}"
+ eval arp_args=\$static_arp_${e}
+ arp -d ${arp_args%%[ ]*} > /dev/null 2>&1
+ done
+ echo '.'
+ fi
+}
+
+load_rc_config $name
+run_rc_command "$1"
Index: share/man/man5/rc.conf.5
===================================================================
--- share/man/man5/rc.conf.5 (revision 196516)
+++ share/man/man5/rc.conf.5 (working copy)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 10, 2009
+.Dd August 25, 2009
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -2227,6 +2227,22 @@
 .Pq Vt str
 The IPv6 equivalent of
 .Va defaultrouter .
+.It Va static_arp_pairs
+.Pq Vt str
+Set to the list of static ARP pairs that are to be added at system
+boot time.
+For each whitespace separated
+.Ar element
+in the value, a
+.Va static_arp_ Ns Aq Ar element
+variable is assumed to exist whose contents will later be passed to a
+.Dq Nm arp Cm -S
+operation.
+For example
+.Bd -literal
+static_arp_pairs="gw"
+static_arp_gw="192.168.1.1 00:01:02:03:04:05"
+.Ed
 .It Va static_routes
 .Pq Vt str
 Set to the list of static routes that are to be added at system

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Adrian Penisoara :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

On Tue, Aug 25, 2009 at 3:16 AM, Xin LI <delphij@...> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Doug Barton wrote:
> > Xin LI wrote:
> >> Any objections for the attached patch?  I'll commit this version if
> >> everybody is happy with it and then see if re@ would approve it for
> >> 8.0-RELEASE.
> >
> > Sorry if I wasn't clear before, but all of the rc.conf variables
> > should be prepended with static_arp_ (as opposed to just arp_). So
> > rather than arp_args you'd want static_arp_args. I realize you're not
> > using set_rcvar() but it's still a good idea to do that for
> > consistency's sake, as well as to make it easier for admins to sort
> > stuff, etc. Please make sure you change that in the man page as well.
>

For consistency we should leave it as "arp_xxx" like it's currently done for
static_routes/route_xxx and ipv6_static_routes/ipv6_route_xxx ...

If we want to keep consistency then either leave it as
"static_arp_pairs/arp_xxx" or change it to something
like "static_arps/arp_xxx


>
>
> I see.  I have corrected arp_ prefixes to static_arp_ prefixes.  Note
> that "arp_args" are not changed because they are intermediate variables
> that are intended as "arp(1) arguments".  I have marked these as local.
>
> > Other than that it looks fine to me.
> >
> > Silly question that I'm sorry just occurred to me right now, have you
> > tested this with IPv6? :)
>
> I think IPv6 would need to use "ndp" instead (cross referenced from
> arp(8)) but am not sure.  Because the script rely on space or tab as
> separator I think it would just work after a simple s/arp/ndp/g for ndp
> but I don't have a local production IPv6 network for the test...
>
> Cheers,
> - --
> Xin LI <delphij@...>    http://www.delphij.net/
> FreeBSD - The Power to Serve!
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.12 (FreeBSD)
>
> iEYEARECAAYFAkqTO3cACgkQi+vbBBjt66CtWwCZARUOgOP3AoZEEEeCCXl9ziVT
> ZwsAoIC1cmv6d0QY7z1RjEoFcfz0Sey/
> =py3J
> -----END PGP SIGNATURE-----
>
> Index: etc/defaults/rc.conf
> ===================================================================
> --- etc/defaults/rc.conf        (revision 196516)
> +++ etc/defaults/rc.conf        (working copy)
> @@ -357,6 +357,7 @@
>
>  ### Network routing options: ###
>  defaultrouter="NO"             # Set to default gateway (or NO).
> +static_arp_pairs=""            # Set to static ARP list (or leave empty).
>  static_routes=""               # Set to static route list (or leave
> empty).
>  natm_static_routes=""          # Set to static route list for NATM (or
> leave empty).
>  gateway_enable="NO"            # Set to YES if this host will be a
> gateway.
>

Please add commented line(s) as an example on how to use this, like for
ipv6_static_routes:

#static_arp_pairs="xxx"        # An example to set an ARP static entry
#arp_xxx="10.20.30.40 00:11:22:33:44:55"


Regards,
Adrian Penisoara
EnterpriseBSD
_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Doug Barton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Xin LI wrote:

> Doug Barton wrote:
>> Xin LI wrote:
>>> Any objections for the attached patch?  I'll commit this version if
>>> everybody is happy with it and then see if re@ would approve it for
>>> 8.0-RELEASE.
>> Sorry if I wasn't clear before, but all of the rc.conf variables
>> should be prepended with static_arp_ (as opposed to just arp_). So
>> rather than arp_args you'd want static_arp_args. I realize you're not
>> using set_rcvar() but it's still a good idea to do that for
>> consistency's sake, as well as to make it easier for admins to sort
>> stuff, etc. Please make sure you change that in the man page as well.
>
> I see.  I have corrected arp_ prefixes to static_arp_ prefixes.  Note
> that "arp_args" are not changed because they are intermediate variables
> that are intended as "arp(1) arguments".  I have marked these as local.

That look great, commit it when you are ready. :)

>> Other than that it looks fine to me.
>
>> Silly question that I'm sorry just occurred to me right now, have you
>> tested this with IPv6? :)
>
> I think IPv6 would need to use "ndp" instead (cross referenced from
> arp(8)) but am not sure.  Because the script rely on space or tab as
> separator I think it would just work after a simple s/arp/ndp/g for ndp
> but I don't have a local production IPv6 network for the test...

Sorry, I had intended that as a joke since in general we're trying to
achieve parity in IPv6 for the features in IPv4. Looking back it's not
even that funny to me anymore ....   :)


Doug

--

    This .signature sanitized for your protection

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: [RFC] script for binding ARP <-> IP pairs

by Doug Barton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Adrian Penisoara wrote:

>> For consistency we should leave it as "arp_xxx" like it's currently done
>> for static_routes/route_xxx and ipv6_static_routes/ipv6_route_xxx ...

The fact that there are legacy examples that don't use a consistent
prepend is not a reason to add more.


Doug

--

    This .signature sanitized for your protection

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."