You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gn...@apache.org on 2020/04/10 14:18:21 UTC

[incubator-nuttx] 04/08: netlink: Sync the macro with Linux definition

This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 570801567429d6496bbdcb1e31c0862d84fe147a
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Wed Apr 8 02:01:03 2020 +0800

    netlink: Sync the macro with Linux definition
    
    Change-Id: I0c0895fa17e167c67fb12acfdfc6dc3a7fb63b3b
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
 include/netpacket/netlink.h | 153 +++++++++++++++++++++++---------------------
 include/nuttx/net/netlink.h |   2 +-
 net/netlink/netlink_route.c |  16 +----
 3 files changed, 82 insertions(+), 89 deletions(-)

diff --git a/include/netpacket/netlink.h b/include/netpacket/netlink.h
index 940c69a..336414c 100644
--- a/include/netpacket/netlink.h
+++ b/include/netpacket/netlink.h
@@ -65,30 +65,32 @@
 
 #define NETLINK_ROUTE          0       /* Routing/device hook for user-space
                                         * routing daemons (default) */
-#define NETLINK_USERSOCK       1       /* Reserved for user mode socket protocols */
-#define NETLINK_FIREWALL       2       /* Interface to receive packets from
+#define NETLINK_UNUSED         1       /* Unused number */
+#define NETLINK_USERSOCK       2       /* Reserved for user mode socket protocols */
+#define NETLINK_FIREWALL       3       /* Interface to receive packets from
                                         * the firewall */
-#define NETLINK_SOCK_DIAG      3       /* Socket monitoring */
-#define NETLINK_NFLOG          4       /* netfilter/iptables ULOG */
-#define NETLINK_XFRM           5       /* Interface to IPsec security databases
+#define NETLINK_SOCK_DIAG      4       /* Socket monitoring */
+#define NETLINK_NFLOG          5       /* netfilter/iptables ULOG */
+#define NETLINK_XFRM           6       /* Interface to IPsec security databases
                                         * for key-manager daemons using the
                                         * Internet Key Exchange protocol. */
-#define NETLINK_ISCSI          6       /* Open-iSCSI */
-#define NETLINK_AUDIT          7       /* Interface to auditing sub-system */
-#define NETLINK_FIB_LOOKUP     8
-#define NETLINK_CONNECTOR      9
-#define NETLINK_NETFILTER      10      /* netfilter subsystem */
-#define NETLINK_IP6_FW         11      /* Interface to transport packets from
+#define NETLINK_SELINUX        7       /* SELinux event notifications */
+#define NETLINK_ISCSI          8       /* Open-iSCSI */
+#define NETLINK_AUDIT          9       /* Interface to auditing sub-system */
+#define NETLINK_FIB_LOOKUP     10
+#define NETLINK_CONNECTOR      11
+#define NETLINK_NETFILTER      12      /* netfilter subsystem */
+#define NETLINK_IP6_FW         13      /* Interface to transport packets from
                                         * netfilter to user-space. */
-#define NETLINK_DNRTMSG        12      /* DECnet routing messages */
-#define NETLINK_KOBJECT_UEVENT 13      /* Kernel messages to userspace */
-#define NETLINK_GENERIC        14
+#define NETLINK_DNRTMSG        14      /* DECnet routing messages */
+#define NETLINK_KOBJECT_UEVENT 15      /* Kernel messages to userspace */
+#define NETLINK_GENERIC        16
                                        /* NETLINK_DM (DM Events) */
-#define NETLINK_SCSITRANSPORT  16      /* SCSI Transports */
-#define NETLINK_ECRYPTFS       17
-#define NETLINK_RDMA           18
-#define NETLINK_CRYPTO         19      /* Crypto layer */
-#define NETLINK_SMC            20      /* SMC monitoring */
+#define NETLINK_SCSITRANSPORT  18      /* SCSI Transports */
+#define NETLINK_ECRYPTFS       19
+#define NETLINK_RDMA           20
+#define NETLINK_CRYPTO         21      /* Crypto layer */
+#define NETLINK_SMC            22      /* SMC monitoring */
 
 /* Definitions associated with struct sockaddr_nl ***************************/
 
@@ -131,16 +133,17 @@
 #define NLMSG_HDRLEN          sizeof(struct nlmsghdr)
 #define NLMSG_LENGTH(n)       (NLMSG_HDRLEN + (n))
 #define NLMSG_SPACE(len)      NLMSG_ALIGN(NLMSG_LENGTH(len))
-#define NLMSG_DATA(hdr)       ((FAR void*)(((FAR char*)hdr) + NLMSG_HDRLEN))
-#define NLMSG_NEXT(hdr,n) \
+#define NLMSG_DATA(hdr)       ((FAR void *)(((FAR char *)hdr) + NLMSG_HDRLEN))
+#define NLMSG_NEXT(hdr, n) \
   ((n) -= NLMSG_ALIGN((hdr)->nlmsg_len), \
-   (FAR struct nlmsghdr*) \
-   (((FAR char*)(hdr)) + NLMSG_ALIGN((hdr)->nlmsg_len)))
-#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
+   (FAR struct nlmsghdr *) \
+   (((FAR char *)(hdr)) + NLMSG_ALIGN((hdr)->nlmsg_len)))
+#define NLMSG_OK(nlh, len) \
+  ((len) >= (int)sizeof(struct nlmsghdr) && \
     (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
     (nlh)->nlmsg_len <= (len))
 #define NLMSG_PAYLOAD(hdr, len) \
-  ((hdr)->nlmsg_len - NLMSG_SPACE((len)))
+  ((hdr)->nlmsg_len - NLMSG_SPACE(len))
 
 #define NLMSG_NOOP            1    /* Nothing */
 #define NLMSG_ERROR           2    /* Error */
@@ -154,14 +157,14 @@
 
 #define RTA_MASK              (sizeof(uint32_t) - 1)
 #define RTA_ALIGN(n)          (((n) + RTA_MASK) & ~RTA_MASK)
-#define RTA_OK(rta,n) \
+#define RTA_OK(rta, n) \
   ((n) >= (int)sizeof(struct rtattr) && \
    (rta)->rta_len >= sizeof(struct rtattr) && \
    (rta)->rta_len <= (n))
 #define RTA_NEXT(rta, attrlen) \
   ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
-   (FAR struct rtattr*)(((FAR char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
-#define RTA_LENGTH(n)         (RTA_ALIGN(sizeof(struct rtattr)) + (n))
+   (FAR struct rtattr *)(((FAR char *)(rta)) + RTA_ALIGN((rta)->rta_len)))
+#define RTA_LENGTH(n)         (sizeof(struct rtattr) + (n))
 #define RTA_SPACE(n)          RTA_ALIGN(RTA_LENGTH(n))
 #define RTA_DATA(rta)         ((FAR void *)(((FAR char *)(rta)) + RTA_LENGTH(0)))
 #define RTA_PAYLOAD(rta)      ((int)((rta)->rta_len) - RTA_LENGTH(0))
@@ -173,8 +176,8 @@
 #define RTA_SRC               2    /* Argument:  Route source address */
 #define RTA_IIF               3    /* Argument:  Input interface index */
 #define RTA_OIF               4    /* Argument:  Output interface index */
-#define RTA_GENMASK           5    /* Argument:  Network address mask of sub-net */
-#define RTA_GATEWAY           6    /* Argument:  Gateway address of the route */
+#define RTA_GATEWAY           5    /* Argument:  Gateway address of the route */
+#define RTA_GENMASK           6    /* Argument:  Network address mask of sub-net */
 
 /* NETLINK_ROUTE protocol message types *************************************/
 
@@ -186,10 +189,10 @@
  *   of rtattr structures.
  */
 
-#define RTM_NEWLINK           0
-#define RTM_DELLINK           1
-#define RTM_GETLINK           2
-#define RTM_SETLINK           3
+#define RTM_NEWLINK           16
+#define RTM_DELLINK           17
+#define RTM_GETLINK           18
+#define RTM_SETLINK           19
 
 /* Address settings:
  *
@@ -199,9 +202,9 @@
  *   followed by rtattr routing attributes.
  */
 
-#define RTM_NEWADDR           4
-#define RTM_DELADDR           5
-#define RTM_GETADDR           6
+#define RTM_NEWADDR           20
+#define RTM_DELADDR           21
+#define RTM_GETADDR           22
 
 /* Routing tables:
  *
@@ -215,9 +218,9 @@
  *   except rtm_table and rtm_protocol, 0 is the wildcard.
  */
 
-#define RTM_NEWROUTE         7
-#define RTM_DELROUTE         8
-#define RTM_GETROUTE         9
+#define RTM_NEWROUTE         24
+#define RTM_DELROUTE         25
+#define RTM_GETROUTE         26
 
 /* Neighbor cache:
  *
@@ -226,9 +229,9 @@
  *   an ARP entry).  The message contains an ndmsg structure.
  */
 
-#define RTM_NEWNEIGH         10
-#define RTM_DELNEIGH         11
-#define RTM_GETNEIGH         12
+#define RTM_NEWNEIGH         28
+#define RTM_DELNEIGH         29
+#define RTM_GETNEIGH         30
 
 /* Routing rules:
  *
@@ -236,9 +239,9 @@
  *   Add, delete or retrieve a routing rule.  Carries a struct rtmsg
  */
 
-#define RTM_NEWRULE          13
-#define RTM_DELRULE          14
-#define RTM_GETRULE          15
+#define RTM_NEWRULE          32
+#define RTM_DELRULE          33
+#define RTM_GETRULE          34
 
 /* Queuing discipline settings:
  *
@@ -247,9 +250,9 @@
  *   struct tcmsg and may be followed by a series of attributes.
  */
 
-#define RTM_NEWQDISC         16
-#define RTM_DELQDISC         17
-#define RTM_GETQDISC         18
+#define RTM_NEWQDISC         36
+#define RTM_DELQDISC         37
+#define RTM_GETQDISC         38
 
 /* Traffic classes used with queues:
  *
@@ -258,9 +261,9 @@
  *   tcmsg as described above.
  */
 
-#define RTM_NEWTCLASS        19
-#define RTM_DELTCLASS        20
-#define RTM_GETTCLASS        21
+#define RTM_NEWTCLASS        40
+#define RTM_DELTCLASS        41
+#define RTM_GETTCLASS        42
 
 /* Traffic filters:
  *
@@ -269,35 +272,39 @@
  *   messages contain a struct tcmsg as described above.
  */
 
-#define RTM_NEWTFILTER       22
-#define RTM_DELTFILTER       23
-#define RTM_GETTFILTER       24
+#define RTM_NEWTFILTER       44
+#define RTM_DELTFILTER       45
+#define RTM_GETTFILTER       46
 
 /* Others: */
 
-#define RTM_NEWACTION        25
-#define RTM_DELACTION        26
-#define RTM_GETACTION        27
-#define RTM_NEWPREFIX        28
-#define RTM_GETPREFIX        29
-#define RTM_GETMULTICAST     30
-#define RTM_GETANYCAST       31
-#define RTM_NEWNEIGHTBL      32
-#define RTM_GETNEIGHTBL      33
-#define RTM_SETNEIGHTBL      34
+#define RTM_NEWACTION        48
+#define RTM_DELACTION        49
+#define RTM_GETACTION        50
+#define RTM_NEWPREFIX        52
+#define RTM_GETMULTICAST     58
+#define RTM_GETANYCAST       62
+#define RTM_NEWNEIGHTBL      64
+#define RTM_GETNEIGHTBL      66
+#define RTM_SETNEIGHTBL      67
 
-#define RTM_FIRSTMSG          0
-#define RTM_LASTMSG          34
+#define RTM_BASE             16
+#define RTM_MAX              67
 
 /* Definitions for struct ifaddrmsg  ****************************************/
 
+#define IFA_RTA(r)          ((FAR struct rtattr *) \
+                             (((FAR char *)(r)) + \
+                              NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
+#define IFA_PAYLOAD(n)      NLMSG_PAYLOAD(n, sizeof(struct ifaddrmsg))
+
 /* ifa_flags definitions:  ifa_flags is a flag word of IFA_F_SECONDARY for
  * secondary address (old alias interface), IFA_F_PERMANENT for a permanent
  * address set by the user and other undocumented flags.
  */
 
 #define IFA_F_SECONDARY      0x01
-#define IFA_F_PERMANENT      0x02
+#define IFA_F_PERMANENT      0x80
 
 /* Definitions for struct ifinfomsg *****************************************/
 
@@ -342,8 +349,8 @@
 #define RTPROT_KERNEL         2    /* Route installed by kernel */
 #define RTPROT_BOOT           3    /* Route installed during boot */
 #define RTPROT_STATIC         4    /* Route installed by administrator */
-#define RTPROT_RA             5    /* RDISC/ND router advertisements */
-#define RTPROT_DHCP           6    /* DHCP client */
+#define RTPROT_RA             9    /* RDISC/ND router advertisements */
+#define RTPROT_DHCP           16   /* DHCP client */
 
 /* rtm_scope */
 
@@ -407,9 +414,9 @@ struct rtattr
 struct ifinfomsg
 {
   uint8_t  ifi_family;    /* AF_UNSPEC */
-  uint8_t  ifi_pid;
+  uint8_t  ifi_pad;
   uint16_t ifi_type;      /* Device type (ARPHRD) */
-  int16_t  ifi_index;     /* Unique interface index */
+  int32_t  ifi_index;     /* Unique interface index */
   uint32_t ifi_flags;     /* Device IFF_* flags  */
   uint32_t ifi_change;    /* Change mask, must always be 0xffffffff */
 };
@@ -434,7 +441,7 @@ struct ifaddrmsg
   uint8_t  ifa_prefixlen; /* Prefix length of address */
   uint8_t  ifa_flags;     /* Address flags.  See IFA_F_* definitions */
   uint8_t  ifa_scope;     /* Address scope */
-  int16_t  ifa_index;     /* Unique interface index */
+  int32_t  ifa_index;     /* Unique interface index */
 };
 
 /* RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
diff --git a/include/nuttx/net/netlink.h b/include/nuttx/net/netlink.h
index cbf9910..cf1655b 100644
--- a/include/nuttx/net/netlink.h
+++ b/include/nuttx/net/netlink.h
@@ -77,7 +77,7 @@ struct netlink_response_s
   /* Message-specific data may follow */
 };
 
-#define SIZEOF_NETLINK_RESPONSE_S(n) (sizeof(struct netlink_response_s) + (n) - 1)
+#define SIZEOF_NETLINK_RESPONSE_S(n) (sizeof(struct netlink_response_s) + (n))
 
 /****************************************************************************
  * Public Function Prototypes
diff --git a/net/netlink/netlink_route.c b/net/netlink/netlink_route.c
index 68b3ec0..6c51ea7 100644
--- a/net/netlink/netlink_route.c
+++ b/net/netlink/netlink_route.c
@@ -79,20 +79,6 @@
 #  define CONFIG_NETLINK_DISABLE_GETROUTE 1
 #endif
 
-#undef NETLINK_DISABLE_NLMSGDONE
-#if defined(CONFIG_NETLINK_DISABLE_GETLINK) && \
-    defined(CONFIG_NETLINK_DISABLE_GETROUTE)
-#  define NETLINK_DISABLE_NLMSGDONE 1
-#endif
-
-/* Helpers ******************************************************************/
-
-#define IFA_RTA(r)  \
-  ((FAR struct rtattr *)(((FAR char *)(r)) + \
-   NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
-#define IFA_PAYLOAD(n) \
-  NLMSG_PAYLOAD(n, sizeof(struct ifaddrmsg))
-
 /****************************************************************************
  * Private Types
  ****************************************************************************/
@@ -416,7 +402,7 @@ static int netlink_device_callback(FAR struct net_driver_s *dev,
   resp->hdr.nlmsg_pid    = devinfo->req->hdr.nlmsg_pid;
 
   resp->iface.ifi_family = devinfo->req->gen.rtgen_family;
-  resp->iface.ifi_pid    = devinfo->req->hdr.nlmsg_pid;
+  resp->iface.ifi_pad    = 0;
   resp->iface.ifi_type   = devinfo->req->hdr.nlmsg_type;
 #ifdef CONFIG_NETDEV_IFINDEX
   resp->iface.ifi_index  = dev->d_ifindex;