[PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions - Kernel

This is a discussion on [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions - Kernel ; Change IPV4 specific macros LOOPBACK MULTICAST LOCAL_MCAST BADCLASS and ZERONET macros to inline functions ipv4_is_ (__be32 addr) Adds type safety and arguably some readability. Changes since last submission: Removed ipv4_addr_octets function Used hex constants Converted recently added rfc3330 macros Signed-off-by: ...

+ Reply to Thread
Results 1 to 11 of 11

Thread: [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions

  1. [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions

    Change IPV4 specific macros LOOPBACK MULTICAST LOCAL_MCAST BADCLASS and ZERONET
    macros to inline functions ipv4_is_(__be32 addr)

    Adds type safety and arguably some readability.

    Changes since last submission:

    Removed ipv4_addr_octets function
    Used hex constants
    Converted recently added rfc3330 macros

    Signed-off-by: Joe Perches
    ---
    include/linux/in.h | 87 ++++++++++++++++++++++++++++++++++++++++++++--------
    1 files changed, 74 insertions(+), 13 deletions(-)

    diff --git a/include/linux/in.h b/include/linux/in.h
    index a8f00ca..f8d6073 100644
    --- a/include/linux/in.h
    +++ b/include/linux/in.h
    @@ -246,21 +246,82 @@ struct sockaddr_in {
    #include

    #ifdef __KERNEL__
    -/* Some random defines to make it easier in the kernel.. */
    -#define LOOPBACK(x) (((x) & htonl(0xff000000)) == htonl(0x7f000000))
    -#define MULTICAST(x) (((x) & htonl(0xf0000000)) == htonl(0xe0000000))
    -#define BADCLASS(x) (((x) & htonl(0xf0000000)) == htonl(0xf0000000))
    -#define ZERONET(x) (((x) & htonl(0xff000000)) == htonl(0x00000000))
    -#define LOCAL_MCAST(x) (((x) & htonl(0xFFFFFF00)) == htonl(0xE0000000))
    +
    +static inline bool ipv4_is_loopback(__be32 addr)
    +{
    + return (addr & htonl(0xff000000)) == htonl(0x7f000000);
    +}
    +
    +static inline bool ipv4_is_multicast(__be32 addr)
    +{
    + return (addr & htonl(0xf0000000)) == htonl(0xe0000000);
    +}
    +
    +static inline bool ipv4_is_local_multicast(__be32 addr)
    +{
    + return (addr & htonl(0xffffff00)) == htonl(0xe0000000);
    +}
    +
    +static inline bool ipv4_is_badclass(__be32 addr)
    +{
    + return (addr & htonl(0xf0000000)) == htonl(0xf0000000);
    +}
    +
    +static inline bool ipv4_is_zeronet(__be32 addr)
    +{
    + return (addr & htonl(0xff000000)) == htonl(0x00000000);
    +}
    +
    +#define LOOPBACK(x) ipv4_is_loopback(x)
    +#define MULTICAST(x) ipv4_is_multicast(x)
    +#define BADCLASS(x) ipv4_is_badclass(x)
    +#define ZERONET(x) ipv4_is_zeronet(x)
    +#define LOCAL_MCAST(x) ipv4_is_local_multicast(x)

    /* Special-Use IPv4 Addresses (RFC3330) */
    -#define PRIVATE_10(x) (((x) & htonl(0xff000000)) == htonl(0x0A000000))
    -#define LINKLOCAL_169(x) (((x) & htonl(0xffff0000)) == htonl(0xA9FE0000))
    -#define PRIVATE_172(x) (((x) & htonl(0xfff00000)) == htonl(0xAC100000))
    -#define TEST_192(x) (((x) & htonl(0xffffff00)) == htonl(0xC0000200))
    -#define ANYCAST_6TO4(x) (((x) & htonl(0xffffff00)) == htonl(0xC0586300))
    -#define PRIVATE_192(x) (((x) & htonl(0xffff0000)) == htonl(0xC0A80000))
    -#define TEST_198(x) (((x) & htonl(0xfffe0000)) == htonl(0xC6120000))
    +
    +static inline bool ipv4_is_private_10(__be32 addr)
    +{
    + return (addr & htonl(0xff000000)) == htonl(0x0a000000);
    +}
    +
    +static inline bool ipv4_is_private_172(__be32 addr)
    +{
    + return (addr & htonl(0xfff00000)) == htonl(0xac100000);
    +}
    +
    +static inline bool ipv4_is_private_192(__be32 addr)
    +{
    + return (addr & htonl(0xffff0000)) == htonl(0xc0a80000);
    +}
    +
    +static inline bool ipv4_is_linklocal_169(__be32 addr)
    +{
    + return (addr & htonl(0xffff0000)) == htonl(0xa9fe0000);
    +}
    +
    +static inline bool ipv4_is_anycast_6to4(__be32 addr)
    +{
    + return (addr & htonl(0xffffff00)) == htonl(0xc0586300);
    +}
    +
    +static inline bool ipv4_is_test_192(__be32 addr)
    +{
    + return (addr & htonl(0xffffff00)) == htonl(0xc0000200);
    +}
    +
    +static inline bool ipv4_is_test_198(__be32 addr)
    +{
    + return (addr & htonl(0xfffe0000)) == htonl(0xc6120000);
    +}
    #endif

    +#define PRIVATE_10(x) ipv4_is_private_10(x)
    +#define LINKLOCAL_169(x) ipv4_is_linklocal_169(x)
    +#define PRIVATE_172(x) ipv4_is_private_172(x)
    +#define TEST_192(x) ipv4_is_test_192(x)
    +#define ANYCAST_6TO4(x) ipv4_is_anycast_6to4(x)
    +#define PRIVATE_192(x) ipv4_is_private_192(x)
    +#define TEST_198(x) ipv4_is_test_198(x)
    +
    #endif /* _LINUX_IN_H */
    --
    1.5.3.7.949.g2221a6

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. [PATCH net-2.6.25 8/8] Remove unused IPV4TYPE macros


    Signed-off-by: Joe Perches
    ---
    include/linux/in.h | 14 --------------
    1 files changed, 0 insertions(+), 14 deletions(-)

    diff --git a/include/linux/in.h b/include/linux/in.h
    index f8d6073..27d8a5a 100644
    --- a/include/linux/in.h
    +++ b/include/linux/in.h
    @@ -272,12 +272,6 @@ static inline bool ipv4_is_zeronet(__be32 addr)
    return (addr & htonl(0xff000000)) == htonl(0x00000000);
    }

    -#define LOOPBACK(x) ipv4_is_loopback(x)
    -#define MULTICAST(x) ipv4_is_multicast(x)
    -#define BADCLASS(x) ipv4_is_badclass(x)
    -#define ZERONET(x) ipv4_is_zeronet(x)
    -#define LOCAL_MCAST(x) ipv4_is_local_multicast(x)
    -
    /* Special-Use IPv4 Addresses (RFC3330) */

    static inline bool ipv4_is_private_10(__be32 addr)
    @@ -316,12 +310,4 @@ static inline bool ipv4_is_test_198(__be32 addr)
    }
    #endif

    -#define PRIVATE_10(x) ipv4_is_private_10(x)
    -#define LINKLOCAL_169(x) ipv4_is_linklocal_169(x)
    -#define PRIVATE_172(x) ipv4_is_private_172(x)
    -#define TEST_192(x) ipv4_is_test_192(x)
    -#define ANYCAST_6TO4(x) ipv4_is_anycast_6to4(x)
    -#define PRIVATE_192(x) ipv4_is_private_192(x)
    -#define TEST_198(x) ipv4_is_test_198(x)
    -
    #endif /* _LINUX_IN_H */
    --
    1.5.3.7.949.g2221a6

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  3. Re: [PATCH net-2.6.25 8/8] Remove unused IPV4TYPE macros

    From: Joe Perches
    Date: Thu, 13 Dec 2007 15:39:01 -0800

    > Signed-off-by: Joe Perches


    Applied, thanks for doing this work Joe.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  4. Re: [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions

    From: Joe Perches
    Date: Thu, 13 Dec 2007 15:38:54 -0800

    > Change IPV4 specific macros LOOPBACK MULTICAST LOCAL_MCAST BADCLASS and ZERONET
    > macros to inline functions ipv4_is_(__be32 addr)
    >
    > Adds type safety and arguably some readability.
    >
    > Changes since last submission:
    >
    > Removed ipv4_addr_octets function
    > Used hex constants
    > Converted recently added rfc3330 macros
    >
    > Signed-off-by: Joe Perches


    Applied.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  5. Re: [PATCH net-2.6.25 8/8] Remove unused IPV4TYPE macros

    On Sun, 2007-12-16 at 13:48 -0800, David Miller wrote:
    > From: Joe Perches
    > Date: Thu, 13 Dec 2007 15:39:01 -0800
    > > Signed-off-by: Joe Perches

    > Applied, thanks for doing this work Joe.


    I broke the parisc build. Bad Joe...

    Here's the patch:

    Signed-off-by: Joe Perches

    diff --git a/drivers/parisc/led.c b/drivers/parisc/led.c
    index a6d6b24..703b85e 100644
    --- a/drivers/parisc/led.c
    +++ b/drivers/parisc/led.c
    @@ -364,7 +364,7 @@ static __inline__ int led_get_net_activity(void)
    struct in_device *in_dev = __in_dev_get_rcu(dev);
    if (!in_dev || !in_dev->ifa_list)
    continue;
    - if (LOOPBACK(in_dev->ifa_list->ifa_local))
    + if (ipv4_is_loopback(in_dev->ifa_list->ifa_local))
    continue;
    stats = dev->get_stats(dev);
    rx_total += stats->rx_packets;


    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  6. Re: [PATCH net-2.6.25 8/8] Remove unused IPV4TYPE macros

    From: Joe Perches
    Date: Sun, 16 Dec 2007 20:01:06 -0800

    > On Sun, 2007-12-16 at 13:48 -0800, David Miller wrote:
    > > From: Joe Perches
    > > Date: Thu, 13 Dec 2007 15:39:01 -0800
    > > > Signed-off-by: Joe Perches

    > > Applied, thanks for doing this work Joe.

    >
    > I broke the parisc build. Bad Joe...
    >
    > Here's the patch:
    >
    > Signed-off-by: Joe Perches


    Applied, thanks.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  7. Re: [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions


    On Dec 13 2007 15:38, Joe Perches wrote:
    >
    >Change IPV4 specific macros LOOPBACK MULTICAST LOCAL_MCAST BADCLASS and ZERONET
    >macros to inline functions ipv4_is_(__be32 addr)
    >
    >Adds type safety and arguably some readability.
    >
    >Changes since last submission:
    >
    >Removed ipv4_addr_octets function
    >Used hex constants
    >Converted recently added rfc3330 macros
    >
    >Signed-off-by: Joe Perches
    >---
    >+static inline bool ipv4_is_loopback(__be32 addr)
    >+{
    >+ return (addr & htonl(0xff000000)) == htonl(0x7f000000);
    >+}
    >+


    Can we use __constant_htonl()?

    >+static inline bool ipv4_is_private_10(__be32 addr)
    >+{
    >+ return (addr & htonl(0xff000000)) == htonl(0x0a000000);
    >+}


    What are these functions needed for, even? There does not seem to be
    any code (at least in davem's net-2.6.25:net/ipv4/, where I dared to grep)
    that uses them.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  8. Re: [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions

    On Mon, 2007-12-17 at 23:37 +0100, Jan Engelhardt wrote:
    > >+static inline bool ipv4_is_loopback(__be32 addr)
    > >+{
    > >+ return (addr & htonl(0xff000000)) == htonl(0x7f000000);
    > >+}
    > >+

    > Can we use __constant_htonl()?


    I believe the generated code is the same.

    > >+static inline bool ipv4_is_private_10(__be32 addr)
    > >+{
    > >+ return (addr & htonl(0xff000000)) == htonl(0x0a000000);
    > >+}

    >
    > What are these functions needed for, even? There does not seem to be
    > any code (at least in davem's net-2.6.25:net/ipv4/, where I dared to grep)
    > that uses them.


    include/net/addrconf.h
    net/sctp/protocol.c

    cheers, Joe

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  9. Re: [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions

    From: Jan Engelhardt
    Date: Mon, 17 Dec 2007 23:37:24 +0100 (CET)

    > Can we use __constant_htonl()?


    That should only be used in initializers.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  10. Re: [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions

    From: Jan Engelhardt
    Date: Mon, 17 Dec 2007 23:37:24 +0100 (CET)

    >
    > On Dec 13 2007 15:38, Joe Perches wrote:
    > >+static inline bool ipv4_is_private_10(__be32 addr)
    > >+{
    > >+ return (addr & htonl(0xff000000)) == htonl(0x0a000000);
    > >+}

    >
    > What are these functions needed for, even? There does not seem to be
    > any code (at least in davem's net-2.6.25:net/ipv4/, where I dared to grep)
    > that uses them.


    You really need to grep the whole tree, never ever decrease the scope
    of directories to search if you want to see if an interface is used.

    It's used by some ipv6 address translation code as well as some
    bits in SCTP:

    include/net/addrconf.h: eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
    net/sctp/protocol.c: } else if (ipv4_is_private_10(addr->v4.sin_addr.s_addr) ||

    So lazy...
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  11. Re: [PATCH net-2.6.25 1/8] Create ipv4_is_<type>(__be32 addr) functions


    On Dec 17 2007 14:43, David Miller wrote:
    >> On Dec 13 2007 15:38, Joe Perches wrote:
    >> >+static inline bool ipv4_is_private_10(__be32 addr)
    >> >+{
    >> >+ return (addr & htonl(0xff000000)) == htonl(0x0a000000);
    >> >+}

    >>
    >> What are these functions needed for, even? There does not seem to be
    >> any code (at least in davem's net-2.6.25:net/ipv4/, where I dared to grep)
    >> that uses them.

    >
    >You really need to grep the whole tree, never ever decrease the scope
    >of directories to search if you want to see if an interface is used.
    >

    Hah you got me there

    >It's used by some ipv6 address translation code as well as some
    >bits in SCTP:
    >
    >include/net/addrconf.h: eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
    >net/sctp/protocol.c: } else if (ipv4_is_private_10(addr->v4.sin_addr.s_addr) ||
    >
    >So lazy...


    I just discovered git-grep...
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread