summaryrefslogtreecommitdiff
path: root/nuttx/include/net/if.h
blob: e05cc7869289a17e55e36aebef7cda06c80cc30f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*******************************************************************************************
 * include/net/if.h
 *
 *   Copyright (C) 2007, 2008, 2012 Gregory Nutt. All rights reserved.
 *   Author: Gregory Nutt <gnutt@nuttx.org>
 *
 * 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 NuttX 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 COPYRIGHT HOLDERS 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
 * COPYRIGHT OWNER 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.
 *
 *******************************************************************************************/

#ifndef __INCLUDE_NET_IF_H
#define __INCLUDE_NET_IF_H

/*******************************************************************************************
 * Included Files
 *******************************************************************************************/

#include <sys/socket.h>

/*******************************************************************************************
 * Pre-Processor Definitions
 *******************************************************************************************/

/* Sizing parameters */

#define IFNAMSIZ        6   /* Older naming standard */
#define IF_NAMESIZE     6   /* Newer naming standard */
#define IFHWADDRLEN     6

#define IFF_DOWN        (1 << 0)
#define IFF_UP          (1 << 1)
#define IFF_RUNNING     (1 << 2)
#define IFF_NOARP       (1 << 7)

/*******************************************************************************************
 * Public Type Definitions
 *******************************************************************************************/

/* Structure passed with the SIOCMIINOTIFY ioctl command to enable notification of
 * of PHY state changes.
 */

struct mii_iotcl_notify_s
{
  pid_t pid;     /* PID of the task to receive the signal.  Zero means "this task" */
  uint8_t signo; /* Signal number to use when signalling */
  FAR void *arg; /* An argument that will accompany the signal callback */
};

/* Structure passed to read from or write to the MII/PHY management interface via the
 * SIOCxMIIREG ioctl commands.
 */

struct mii_ioctl_data_s
{
  uint16_t phy_id;      /* PHY device address */
  uint16_t reg_num;     /* PHY register address */
  uint16_t val_in;      /* PHY input data */
  uint16_t val_out;     /* PHY output data */
};

/* This is the newer form if the I/F request structure that can be used with both IPv4
 * and IPv6.
 */

struct lifreq
{
  char                        lifr_name[IFNAMSIZ];      /* Network device name (e.g. "eth0") */
  union
  {
    struct sockaddr_storage   lifru_addr;               /* IP Address */
    struct sockaddr_storage   lifru_dstaddr;            /* P-to-P Address */
    struct sockaddr_storage   lifru_broadaddr;          /* Broadcast address */
    struct sockaddr_storage   lifru_netmask;            /* Netmask */
    struct sockaddr           lifru_hwaddr;             /* MAC address */
    int                       lifru_count;              /* Number of devices */
    int                       lifru_mtu;                /* MTU size */
    uint8_t                   lifru_flags;              /* Interface flags */
    struct mii_iotcl_notify_s llfru_mii_notify;         /* PHY event notification */
    struct mii_ioctl_data_s   lifru_mii_data;           /* MII request data */
  } lifr_ifru;
};

#define lifr_addr             lifr_ifru.lifru_addr      /* IP address */
#define lifr_dstaddr          lifr_ifru.lifru_dstaddr   /* P-to-P Address */
#define lifr_broadaddr        lifr_ifru.lifru_broadaddr /* Broadcast address */
#define lifr_netmask          lifr_ifru.lifru_netmask   /* Interface net mask */
#define lifr_hwaddr           lifr_ifru.lifru_hwaddr    /* MAC address */
#define lifr_mtu              lifr_ifru.lifru_mtu       /* MTU */
#define lifr_count            lifr_ifru.lifru_count     /* Number of devices */
#define lifr_flags            lifr_ifru.lifru_flags     /* interface flags */
#define lifr_mii_phy_id       lifr_ifru.lifru_mii_data.phy_id  /* PHY device address */
#define lifr_mii_reg_num      lifr_ifru.lifru_mii_data.reg_num /* PHY register address */
#define lifr_mii_val_in       lifr_ifru.lifru_mii_data.val_in  /* PHY input data */
#define lifr_mii_val_out      lifr_ifru.lifru_mii_data.val_out /* PHY output data */

/* This is the older I/F request that should only be used with IPv4.  However, since
 * NuttX only supports IPv4 or 6 (not both), we can force the older structure to
 * be compatible when IPv6 is enabled.
 */

#ifndef CONFIG_NET_IPv6
struct ifreq
{
  char                        ifr_name[IFNAMSIZ];       /* Network device name (e.g. "eth0") */
  union
  {
    struct sockaddr           ifru_addr;                /* IP Address */
    struct sockaddr           ifru_dstaddr;             /* P-to-P Address */
    struct sockaddr           ifru_broadaddr;           /* Broadcast address */
    struct sockaddr           ifru_netmask;             /* Netmask */
    struct sockaddr           ifru_hwaddr;              /* MAC address */
    int                       ifru_count;               /* Number of devices */
    int                       ifru_mtu;                 /* MTU size */
    uint8_t                   ifru_flags;               /* Interface flags */
    struct mii_iotcl_notify_s ifru_mii_notify;          /* PHY event notification */
    struct mii_ioctl_data_s   ifru_mii_data;            /* MII request data */
  } ifr_ifru;
};

#define ifr_addr              ifr_ifru.ifru_addr        /* IP address */
#define ifr_dstaddr           ifr_ifru.ifru_dstaddr     /* P-to-P Address */
#define ifr_broadaddr         ifr_ifru.ifru_broadaddr   /* Broadcast address */
#define ifr_netmask           ifr_ifru.ifru_netmask     /* Interface net mask */
#define ifr_hwaddr            ifr_ifru.ifru_hwaddr      /* MAC address */
#define ifr_mtu               ifr_ifru.ifru_mtu         /* MTU */
#define ifr_count             ifr_ifru.ifru_count       /* Number of devices */
#define ifr_flags             ifr_ifru.ifru_flags       /* interface flags */
#define ifr_mii_phy_id        ifr_ifru.ifru_mii_data.phy_id  /* PHY device address */
#define ifr_mii_reg_num       ifr_ifru.ifru_mii_data.reg_num /* PHY register address */
#define ifr_mii_val_in        ifr_ifru.ifru_mii_data.val_in  /* PHY input data */
#define ifr_mii_val_out       ifr_ifru.ifru_mii_data.val_out /* PHY output data */

#else /* CONFIG_NET_IPv6 */

#define ifreq                 lifreq                    /* Replace ifreq with lifreq */
#define ifr_name              lifr_name                 /* Network device name */
#define ifr_addr              lifr_ifru.lifru_addr      /* IP address */
#define ifr_dstaddr           lifr_ifru.lifru_dstaddr   /* P-to-P Address */
#define ifr_broadaddr         lifr_ifru.lifru_broadaddr /* Broadcast address */
#define ifr_netmask           lifr_ifru.lifru_netmask   /* Interface net mask */
#define ifr_hwaddr            lifr_ifru.lifru_hwaddr    /* MAC address */
#define ifr_mtu               lifr_ifru.lifru_mtu       /* MTU */
#define ifr_count             lifr_ifru.lifru_count     /* Number of devices */
#define ifr_flags             lifr_ifru.lifru_flags     /* interface flags */
#define ifr_mii_phy_id        lifr_ifru.lifru_mii_data.phy_id  /* PHY device address */
#define ifr_mii_reg_num       lifr_ifru.lifru_mii_data.reg_num /* PHY register address */
#define ifr_mii_val_in        lifr_ifru.lifru_mii_data.val_in  /* PHY input data */
#define ifr_mii_val_out       lifr_ifru.lifru_mii_data.val_out /* PHY output data */

#endif /* CONFIG_NET_IPv6 */

/*******************************************************************************************
 * Public Function Prototypes
 *******************************************************************************************/

#endif /* __INCLUDE_NET_IF_H */