iPXE
Data Structures | Functions | Variables
netdev_settings.c File Reference

Network device configuration settings. More...

#include <string.h>
#include <errno.h>
#include <byteswap.h>
#include <ipxe/dhcp.h>
#include <ipxe/dhcpopts.h>
#include <ipxe/settings.h>
#include <ipxe/device.h>
#include <ipxe/netdevice.h>
#include <ipxe/init.h>

Go to the source code of this file.

Data Structures

struct  netdev_setting_operation
 A network device setting operation. More...
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
 FILE_SECBOOT (PERMITTED)
 
const struct setting mac_setting __setting (SETTING_NETDEV, mac)
 Network device predefined settings. More...
 
const struct setting hwaddr_setting __setting (SETTING_NETDEV, hwaddr)
 
const struct setting bustype_setting __setting (SETTING_NETDEV, bustype)
 
const struct setting busloc_setting __setting (SETTING_NETDEV, busloc)
 
const struct setting busid_setting __setting (SETTING_NETDEV, busid)
 
const struct setting linktype_setting __setting (SETTING_NETDEV, linktype)
 
const struct setting chip_setting __setting (SETTING_NETDEV, chip)
 
const struct setting ifname_setting __setting (SETTING_NETDEV, ifname)
 
const struct setting mtu_setting __setting (SETTING_NETDEV, mtu)
 
static int netdev_store_mac (struct net_device *netdev, const void *data, size_t len)
 Store link-layer address setting. More...
 
static int netdev_fetch_mac (struct net_device *netdev, void *data, size_t len)
 Fetch link-layer address setting. More...
 
static int netdev_fetch_hwaddr (struct net_device *netdev, void *data, size_t len)
 Fetch hardware address setting. More...
 
static int netdev_fetch_bustype (struct net_device *netdev, void *data, size_t len)
 Fetch bus type setting. More...
 
static int netdev_fetch_busloc (struct net_device *netdev, void *data, size_t len)
 Fetch bus location setting. More...
 
static int netdev_fetch_busid (struct net_device *netdev, void *data, size_t len)
 Fetch bus ID setting. More...
 
static int netdev_fetch_linktype (struct net_device *netdev, void *data, size_t len)
 Fetch link layer type setting. More...
 
static int netdev_fetch_chip (struct net_device *netdev, void *data, size_t len)
 Fetch chip setting. More...
 
static int netdev_fetch_ifname (struct net_device *netdev, void *data, size_t len)
 Fetch ifname setting. More...
 
static int netdev_store (struct settings *settings, const struct setting *setting, const void *data, size_t len)
 Store value of network device setting. More...
 
static int netdev_fetch (struct settings *settings, struct setting *setting, void *data, size_t len)
 Fetch value of network device setting. More...
 
static void netdev_clear (struct settings *settings)
 Clear network device settings. More...
 
static struct settingsnetdev_redirect (struct settings *settings)
 Redirect "netX" settings block. More...
 
static void netdev_redirect_settings_init (void)
 Initialise "netX" settings. More...
 
struct init_fn netdev_redirect_settings_init_fn __init_fn (INIT_LATE)
 "netX" settings initialiser More...
 
static int apply_netdev_settings (void)
 Apply network device settings. More...
 

Variables

static struct netdev_setting_operation netdev_setting_operations []
 Network device settings. More...
 
struct settings_operations netdev_settings_operations
 Network device configuration settings operations. More...
 
static struct settings_operations netdev_redirect_settings_operations
 "netX" settings operations More...
 
static struct settings netdev_redirect_settings
 "netX" settings More...
 
struct settings_applicator netdev_applicator __settings_applicator
 Network device settings applicator. More...
 

Detailed Description

Network device configuration settings.

Definition in file netdev_settings.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED  )

◆ __setting() [1/9]

const struct setting mac_setting __setting ( SETTING_NETDEV  ,
mac   
)

Network device predefined settings.

◆ __setting() [2/9]

const struct setting hwaddr_setting __setting ( SETTING_NETDEV  ,
hwaddr   
)

◆ __setting() [3/9]

const struct setting bustype_setting __setting ( SETTING_NETDEV  ,
bustype   
)

◆ __setting() [4/9]

const struct setting busloc_setting __setting ( SETTING_NETDEV  ,
busloc   
)

◆ __setting() [5/9]

const struct setting busid_setting __setting ( SETTING_NETDEV  ,
busid   
)

◆ __setting() [6/9]

const struct setting linktype_setting __setting ( SETTING_NETDEV  ,
linktype   
)

◆ __setting() [7/9]

const struct setting chip_setting __setting ( SETTING_NETDEV  ,
chip   
)

◆ __setting() [8/9]

const struct setting ifname_setting __setting ( SETTING_NETDEV  ,
ifname   
)

◆ __setting() [9/9]

const struct setting mtu_setting __setting ( SETTING_NETDEV  ,
mtu   
)

◆ netdev_store_mac()

static int netdev_store_mac ( struct net_device netdev,
const void *  data,
size_t  len 
)
static

Store link-layer address setting.

Parameters
netdevNetwork device
dataSetting data, or NULL to clear setting
lenLength of setting data
Return values
rcReturn status code

Definition at line 99 of file netdev_settings.c.

100  {
102 
103  /* Record new MAC address */
104  if ( data ) {
105  if ( len != netdev->ll_protocol->ll_addr_len )
106  return -EINVAL;
107  memcpy ( netdev->ll_addr, data, len );
108  } else {
109  /* Reset MAC address if clearing setting */
111  }
112 
113  return 0;
114 }
#define EINVAL
Invalid argument.
Definition: errno.h:429
uint8_t ll_addr_len
Link-layer address length.
Definition: netdevice.h:199
void(* init_addr)(const void *hw_addr, void *ll_addr)
Initialise link-layer address.
Definition: netdevice.h:151
A link-layer protocol.
Definition: netdevice.h:115
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
uint8_t data[48]
Additional event data.
Definition: ena.h:22
uint8_t ll_addr[MAX_LL_ADDR_LEN]
Link-layer address.
Definition: netdevice.h:388
uint8_t hw_addr[MAX_HW_ADDR_LEN]
Hardware address.
Definition: netdevice.h:382
struct ll_protocol * ll_protocol
Link-layer protocol.
Definition: netdevice.h:373

References data, EINVAL, net_device::hw_addr, ll_protocol::init_addr, len, net_device::ll_addr, ll_protocol::ll_addr_len, net_device::ll_protocol, memcpy(), and netdev.

◆ netdev_fetch_mac()

static int netdev_fetch_mac ( struct net_device netdev,
void *  data,
size_t  len 
)
static

Fetch link-layer address setting.

Parameters
netdevNetwork device
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 124 of file netdev_settings.c.

125  {
126  size_t max_len = netdev->ll_protocol->ll_addr_len;
127 
128  if ( len > max_len )
129  len = max_len;
130  memcpy ( data, netdev->ll_addr, len );
131  return max_len;
132 }
uint8_t ll_addr_len
Link-layer address length.
Definition: netdevice.h:199
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
uint8_t data[48]
Additional event data.
Definition: ena.h:22
uint8_t ll_addr[MAX_LL_ADDR_LEN]
Link-layer address.
Definition: netdevice.h:388
struct ll_protocol * ll_protocol
Link-layer protocol.
Definition: netdevice.h:373

References data, len, net_device::ll_addr, ll_protocol::ll_addr_len, net_device::ll_protocol, memcpy(), and netdev.

◆ netdev_fetch_hwaddr()

static int netdev_fetch_hwaddr ( struct net_device netdev,
void *  data,
size_t  len 
)
static

Fetch hardware address setting.

Parameters
netdevNetwork device
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 142 of file netdev_settings.c.

143  {
144  size_t max_len = netdev->ll_protocol->hw_addr_len;
145 
146  if ( len > max_len )
147  len = max_len;
148  memcpy ( data, netdev->hw_addr, len );
149  return max_len;
150 }
void * memcpy(void *dest, const void *src, size_t len) __nonnull
uint8_t hw_addr_len
Hardware address length.
Definition: netdevice.h:197
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
uint8_t data[48]
Additional event data.
Definition: ena.h:22
uint8_t hw_addr[MAX_HW_ADDR_LEN]
Hardware address.
Definition: netdevice.h:382
struct ll_protocol * ll_protocol
Link-layer protocol.
Definition: netdevice.h:373

References data, net_device::hw_addr, ll_protocol::hw_addr_len, len, net_device::ll_protocol, memcpy(), and netdev.

◆ netdev_fetch_bustype()

static int netdev_fetch_bustype ( struct net_device netdev,
void *  data,
size_t  len 
)
static

Fetch bus type setting.

Parameters
netdevNetwork device
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 160 of file netdev_settings.c.

161  {
162  static const char *bustypes[] = {
163  [BUS_TYPE_PCI] = "PCI",
164  [BUS_TYPE_ISAPNP] = "ISAPNP",
165  [BUS_TYPE_EISA] = "EISA",
166  [BUS_TYPE_MCA] = "MCA",
167  [BUS_TYPE_ISA] = "ISA",
168  [BUS_TYPE_TAP] = "TAP",
169  [BUS_TYPE_EFI] = "EFI",
170  [BUS_TYPE_XEN] = "XEN",
171  [BUS_TYPE_HV] = "HV",
172  [BUS_TYPE_USB] = "USB",
173  [BUS_TYPE_DT] = "DT",
174  };
175  struct device_description *desc = &netdev->dev->desc;
176  const char *bustype;
177 
178  assert ( desc->bus_type < ( sizeof ( bustypes ) /
179  sizeof ( bustypes[0] ) ) );
180  bustype = bustypes[desc->bus_type];
181  if ( ! bustype )
182  return -ENOENT;
183  strncpy ( data, bustype, len );
184  return strlen ( bustype );
185 }
#define ENOENT
No such file or directory.
Definition: errno.h:515
A hardware device description.
Definition: device.h:20
#define BUS_TYPE_MCA
MCA bus type.
Definition: device.h:53
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition: string.c:361
struct ena_llq_option desc
Descriptor counts.
Definition: ena.h:20
#define BUS_TYPE_ISA
ISA bus type.
Definition: device.h:56
#define BUS_TYPE_PCI
PCI bus type.
Definition: device.h:44
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
#define BUS_TYPE_EISA
EISA bus type.
Definition: device.h:50
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
#define BUS_TYPE_DT
Devicetree bus type.
Definition: device.h:74
#define BUS_TYPE_EFI
EFI bus type.
Definition: device.h:62
struct device * dev
Underlying hardware device.
Definition: netdevice.h:365
#define BUS_TYPE_TAP
TAP bus type.
Definition: device.h:59
uint8_t data[48]
Additional event data.
Definition: ena.h:22
struct device_description desc
Device description.
Definition: device.h:83
#define BUS_TYPE_XEN
Xen bus type.
Definition: device.h:65
#define BUS_TYPE_USB
USB bus type.
Definition: device.h:71
#define BUS_TYPE_HV
Hyper-V bus type.
Definition: device.h:68
#define BUS_TYPE_ISAPNP
ISAPnP bus type.
Definition: device.h:47

References assert(), BUS_TYPE_DT, BUS_TYPE_EFI, BUS_TYPE_EISA, BUS_TYPE_HV, BUS_TYPE_ISA, BUS_TYPE_ISAPNP, BUS_TYPE_MCA, BUS_TYPE_PCI, BUS_TYPE_TAP, BUS_TYPE_USB, BUS_TYPE_XEN, data, desc, device::desc, net_device::dev, ENOENT, len, netdev, strlen(), and strncpy().

◆ netdev_fetch_busloc()

static int netdev_fetch_busloc ( struct net_device netdev,
void *  data,
size_t  len 
)
static

Fetch bus location setting.

Parameters
netdevNetwork device
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 195 of file netdev_settings.c.

196  {
197  struct device_description *desc = &netdev->dev->desc;
198  uint32_t busloc;
199 
200  busloc = cpu_to_be32 ( desc->location );
201  if ( len > sizeof ( busloc ) )
202  len = sizeof ( busloc );
203  memcpy ( data, &busloc, len );
204  return sizeof ( busloc );
205 }
A hardware device description.
Definition: device.h:20
struct ena_llq_option desc
Descriptor counts.
Definition: ena.h:20
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
unsigned int uint32_t
Definition: stdint.h:12
struct device * dev
Underlying hardware device.
Definition: netdevice.h:365
#define cpu_to_be32(value)
Definition: byteswap.h:111
uint8_t data[48]
Additional event data.
Definition: ena.h:22
struct device_description desc
Device description.
Definition: device.h:83

References cpu_to_be32, data, desc, device::desc, net_device::dev, len, memcpy(), and netdev.

◆ netdev_fetch_busid()

static int netdev_fetch_busid ( struct net_device netdev,
void *  data,
size_t  len 
)
static

Fetch bus ID setting.

Parameters
netdevNetwork device
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 215 of file netdev_settings.c.

216  {
217  struct device_description *desc = &netdev->dev->desc;
218  struct dhcp_netdev_desc dhcp_desc;
219 
220  dhcp_desc.type = desc->bus_type;
221  dhcp_desc.vendor = htons ( desc->vendor );
222  dhcp_desc.device = htons ( desc->device );
223  if ( len > sizeof ( dhcp_desc ) )
224  len = sizeof ( dhcp_desc );
225  memcpy ( data, &dhcp_desc, len );
226  return sizeof ( dhcp_desc );
227 }
uint8_t type
Bus type ID.
Definition: dhcp.h:451
A hardware device description.
Definition: device.h:20
struct ena_llq_option desc
Descriptor counts.
Definition: ena.h:20
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
Network device descriptor.
Definition: dhcp.h:449
struct device * dev
Underlying hardware device.
Definition: netdevice.h:365
uint8_t data[48]
Additional event data.
Definition: ena.h:22
struct device_description desc
Device description.
Definition: device.h:83
#define htons(value)
Definition: byteswap.h:136

References data, desc, device::desc, net_device::dev, dhcp_netdev_desc::device, htons, len, memcpy(), netdev, dhcp_netdev_desc::type, and dhcp_netdev_desc::vendor.

◆ netdev_fetch_linktype()

static int netdev_fetch_linktype ( struct net_device netdev,
void *  data,
size_t  len 
)
static

Fetch link layer type setting.

Parameters
netdevNetwork device
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 237 of file netdev_settings.c.

238  {
239  const char *linktype = netdev->ll_protocol->name;
240 
241  strncpy ( data, linktype, len );
242  return strlen ( linktype );
243 }
const char * name
Protocol name.
Definition: netdevice.h:117
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition: string.c:361
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
uint8_t data[48]
Additional event data.
Definition: ena.h:22
linktype
Definition: 3c90x.h:240
struct ll_protocol * ll_protocol
Link-layer protocol.
Definition: netdevice.h:373

References data, len, net_device::ll_protocol, ll_protocol::name, netdev, strlen(), and strncpy().

◆ netdev_fetch_chip()

static int netdev_fetch_chip ( struct net_device netdev,
void *  data,
size_t  len 
)
static

Fetch chip setting.

Parameters
netdevNetwork device
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 253 of file netdev_settings.c.

254  {
255  const char *chip = netdev->dev->driver_name;
256 
257  strncpy ( data, chip, len );
258  return strlen ( chip );
259 }
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition: string.c:361
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
const char * driver_name
Driver name.
Definition: device.h:81
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
struct device * dev
Underlying hardware device.
Definition: netdevice.h:365
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References data, net_device::dev, device::driver_name, len, netdev, strlen(), and strncpy().

◆ netdev_fetch_ifname()

static int netdev_fetch_ifname ( struct net_device netdev,
void *  data,
size_t  len 
)
static

Fetch ifname setting.

Parameters
netdevNetwork device
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 269 of file netdev_settings.c.

270  {
271  const char *ifname = netdev->name;
272 
273  strncpy ( data, ifname, len );
274  return strlen ( ifname );
275 }
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition: string.c:361
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
char name[NETDEV_NAME_LEN]
Name of this network device.
Definition: netdevice.h:363
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References data, len, net_device::name, netdev, strlen(), and strncpy().

◆ netdev_store()

static int netdev_store ( struct settings settings,
const struct setting setting,
const void *  data,
size_t  len 
)
static

Store value of network device setting.

Parameters
settingsSettings block
settingSetting to store
dataSetting data, or NULL to clear setting
lenLength of setting data
Return values
rcReturn status code

Definition at line 321 of file netdev_settings.c.

323  {
324  struct net_device *netdev = container_of ( settings, struct net_device,
325  settings.settings );
327  unsigned int i;
328 
329  /* Handle network device-specific settings */
330  for ( i = 0 ; i < ( sizeof ( netdev_setting_operations ) /
331  sizeof ( netdev_setting_operations[0] ) ) ; i++ ) {
333  if ( setting_cmp ( setting, op->setting ) == 0 ) {
334  if ( op->store ) {
335  return op->store ( netdev, data, len );
336  } else {
337  return -ENOTSUP;
338  }
339  }
340  }
341 
343 }
static struct netdev_setting_operation netdev_setting_operations[]
Network device settings.
#define ENOTSUP
Operation not supported.
Definition: errno.h:590
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:36
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
A network device setting operation.
A network device.
Definition: netdevice.h:353
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
int generic_settings_store(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of generic setting.
Definition: settings.c:127
uint8_t data[48]
Additional event data.
Definition: ena.h:22
int setting_cmp(const struct setting *a, const struct setting *b)
Compare two settings.
Definition: settings.c:1121

References container_of, data, ENOTSUP, generic_settings_store(), len, netdev, netdev_setting_operations, op, and setting_cmp().

◆ netdev_fetch()

static int netdev_fetch ( struct settings settings,
struct setting setting,
void *  data,
size_t  len 
)
static

Fetch value of network device setting.

Parameters
settingsSettings block
settingSetting to fetch
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 354 of file netdev_settings.c.

355  {
356  struct net_device *netdev = container_of ( settings, struct net_device,
357  settings.settings );
359  unsigned int i;
360 
361  /* Handle network device-specific settings */
362  for ( i = 0 ; i < ( sizeof ( netdev_setting_operations ) /
363  sizeof ( netdev_setting_operations[0] ) ) ; i++ ) {
365  if ( setting_cmp ( setting, op->setting ) == 0 )
366  return op->fetch ( netdev, data, len );
367  }
368 
370 }
static struct netdev_setting_operation netdev_setting_operations[]
Network device settings.
int generic_settings_fetch(struct settings *settings, struct setting *setting, void *data, size_t len)
Fetch value of generic setting.
Definition: settings.c:179
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:36
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
A network device setting operation.
A network device.
Definition: netdevice.h:353
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
uint8_t data[48]
Additional event data.
Definition: ena.h:22
int setting_cmp(const struct setting *a, const struct setting *b)
Compare two settings.
Definition: settings.c:1121

References container_of, data, generic_settings_fetch(), len, netdev, netdev_setting_operations, op, and setting_cmp().

◆ netdev_clear()

static void netdev_clear ( struct settings settings)
static

Clear network device settings.

Parameters
settingsSettings block

Definition at line 377 of file netdev_settings.c.

377  {
379 }
void generic_settings_clear(struct settings *settings)
Clear generic settings block.
Definition: settings.c:208
A settings block.
Definition: settings.h:133

References generic_settings_clear().

◆ netdev_redirect()

static struct settings* netdev_redirect ( struct settings settings)
static

Redirect "netX" settings block.

Parameters
settingsSettings block
Return values
settingsUnderlying settings block

Definition at line 394 of file netdev_settings.c.

394  {
395  struct net_device *netdev;
396 
397  /* Redirect to "netX" network device */
399  if ( netdev ) {
400  return netdev_settings ( netdev );
401  } else {
402  return settings;
403  }
404 }
static struct settings * netdev_settings(struct net_device *netdev)
Get per-netdevice configuration settings block.
Definition: netdevice.h:587
static struct net_device * netdev
Definition: gdbudp.c:52
A network device.
Definition: netdevice.h:353
A settings block.
Definition: settings.h:133
const char * name
Name.
Definition: settings.h:137
struct net_device * find_netdev(const char *name)
Get network device by name.
Definition: netdevice.c:989
struct generic_settings settings
Configuration settings applicable to this device.
Definition: netdevice.h:429

References find_netdev(), settings::name, netdev, netdev_settings(), and net_device::settings.

◆ netdev_redirect_settings_init()

static void netdev_redirect_settings_init ( void  )
static

Initialise "netX" settings.

Definition at line 420 of file netdev_settings.c.

420  {
421  int rc;
422 
424  "netX" ) ) != 0 ) {
425  DBG ( "Could not register netX settings: %s\n",
426  strerror ( rc ) );
427  return;
428  }
429 }
static struct settings netdev_redirect_settings
"netX" settings
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
int register_settings(struct settings *settings, struct settings *parent, const char *name)
Register settings block.
Definition: settings.c:476
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References DBG, netdev_redirect_settings, NULL, rc, register_settings(), and strerror().

◆ __init_fn()

struct init_fn netdev_redirect_settings_init_fn __init_fn ( INIT_LATE  )

"netX" settings initialiser

◆ apply_netdev_settings()

static int apply_netdev_settings ( void  )
static

Apply network device settings.

Return values
rcReturn status code

Definition at line 442 of file netdev_settings.c.

442  {
443  struct net_device *netdev;
444  struct settings *settings;
445  struct ll_protocol *ll_protocol;
446  size_t max_mtu;
447  size_t old_mtu;
448  size_t mtu;
449  int rc;
450 
451  /* Process settings for each network device */
452  for_each_netdev ( netdev ) {
453 
454  /* Get network device settings */
456 
457  /* Get MTU */
458  mtu = fetch_uintz_setting ( settings, &mtu_setting );
459 
460  /* Do nothing unless MTU is specified */
461  if ( ! mtu )
462  continue;
463 
464  /* Limit MTU to maximum supported by hardware */
466  max_mtu = ( netdev->max_pkt_len - ll_protocol->ll_header_len );
467  if ( mtu > max_mtu ) {
468  DBGC ( netdev, "NETDEV %s cannot support MTU %zd (max "
469  "%zd)\n", netdev->name, mtu, max_mtu );
470  mtu = max_mtu;
471  }
472 
473  /* Update maximum packet length */
474  old_mtu = netdev->mtu;
475  netdev->mtu = mtu;
476  if ( mtu != old_mtu ) {
477  DBGC ( netdev, "NETDEV %s MTU is %zd\n",
478  netdev->name, mtu );
479  }
480 
481  /* Close and reopen network device if MTU has increased */
482  if ( netdev_is_open ( netdev ) && ( mtu > old_mtu ) ) {
483  netdev_close ( netdev );
484  if ( ( rc = netdev_open ( netdev ) ) != 0 ) {
485  DBGC ( netdev, "NETDEV %s could not reopen: "
486  "%s\n", netdev->name, strerror ( rc ) );
487  return rc;
488  }
489  }
490  }
491 
492  return 0;
493 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
uint8_t ll_header_len
Link-layer header length.
Definition: netdevice.h:201
size_t mtu
Maximum transmission unit length.
Definition: netdevice.h:416
#define DBGC(...)
Definition: compiler.h:505
static struct settings * netdev_settings(struct net_device *netdev)
Get per-netdevice configuration settings block.
Definition: netdevice.h:587
A link-layer protocol.
Definition: netdevice.h:115
static int netdev_is_open(struct net_device *netdev)
Check whether or not network device is open.
Definition: netdevice.h:662
static struct net_device * netdev
Definition: gdbudp.c:52
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
#define for_each_netdev(netdev)
Iterate over all network devices.
Definition: netdevice.h:547
A network device.
Definition: netdevice.h:353
A settings block.
Definition: settings.h:133
unsigned long fetch_uintz_setting(struct settings *settings, const struct setting *setting)
Fetch value of unsigned integer setting, or zero.
Definition: settings.c:1069
void netdev_close(struct net_device *netdev)
Close network device.
Definition: netdevice.c:896
char name[NETDEV_NAME_LEN]
Name of this network device.
Definition: netdevice.h:363
uint32_t mtu
Maximum MTU.
Definition: ena.h:28
size_t max_pkt_len
Maximum packet length.
Definition: netdevice.h:410
int netdev_open(struct net_device *netdev)
Open network device.
Definition: netdevice.c:862
struct ll_protocol * ll_protocol
Link-layer protocol.
Definition: netdevice.h:373

References DBGC, fetch_uintz_setting(), for_each_netdev, ll_protocol::ll_header_len, net_device::ll_protocol, net_device::max_pkt_len, mtu, net_device::mtu, net_device::name, netdev, netdev_close(), netdev_is_open(), netdev_open(), netdev_settings(), rc, and strerror().

Variable Documentation

◆ netdev_setting_operations

struct netdev_setting_operation netdev_setting_operations[]
static
Initial value:
= {
{ &mac_setting, netdev_store_mac, netdev_fetch_mac },
{ &hwaddr_setting, NULL, netdev_fetch_hwaddr },
{ &bustype_setting, NULL, netdev_fetch_bustype },
{ &busloc_setting, NULL, netdev_fetch_busloc },
{ &busid_setting, NULL, netdev_fetch_busid },
{ &linktype_setting, NULL, netdev_fetch_linktype },
{ &chip_setting, NULL, netdev_fetch_chip },
{ &ifname_setting, NULL, netdev_fetch_ifname },
}
static int netdev_fetch_mac(struct net_device *netdev, void *data, size_t len)
Fetch link-layer address setting.
static int netdev_fetch_chip(struct net_device *netdev, void *data, size_t len)
Fetch chip setting.
static int netdev_fetch_busid(struct net_device *netdev, void *data, size_t len)
Fetch bus ID setting.
static int netdev_fetch_linktype(struct net_device *netdev, void *data, size_t len)
Fetch link layer type setting.
static int netdev_fetch_hwaddr(struct net_device *netdev, void *data, size_t len)
Fetch hardware address setting.
static int netdev_fetch_bustype(struct net_device *netdev, void *data, size_t len)
Fetch bus type setting.
static int netdev_fetch_ifname(struct net_device *netdev, void *data, size_t len)
Fetch ifname setting.
static int netdev_store_mac(struct net_device *netdev, const void *data, size_t len)
Store link-layer address setting.
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
static int netdev_fetch_busloc(struct net_device *netdev, void *data, size_t len)
Fetch bus location setting.

Network device settings.

Definition at line 301 of file netdev_settings.c.

Referenced by netdev_fetch(), and netdev_store().

◆ netdev_settings_operations

struct settings_operations netdev_settings_operations
Initial value:
= {
.store = netdev_store,
.fetch = netdev_fetch,
.clear = netdev_clear,
}
static void netdev_clear(struct settings *settings)
Clear network device settings.
static int netdev_store(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of network device setting.
static int netdev_fetch(struct settings *settings, struct setting *setting, void *data, size_t len)
Fetch value of network device setting.

Network device configuration settings operations.

Definition at line 382 of file netdev_settings.c.

Referenced by netdev_settings_init().

◆ netdev_redirect_settings_operations

struct settings_operations netdev_redirect_settings_operations
static
Initial value:
= {
.redirect = netdev_redirect,
}
static struct settings * netdev_redirect(struct settings *settings)
Redirect "netX" settings block.

"netX" settings operations

Definition at line 407 of file netdev_settings.c.

◆ netdev_redirect_settings

struct settings netdev_redirect_settings
static
Initial value:
= {
.refcnt = NULL,
}
static struct settings netdev_redirect_settings
"netX" settings
static struct settings_operations netdev_redirect_settings_operations
"netX" settings operations
struct list_head siblings
Sibling settings blocks.
Definition: settings.h:141
struct list_head children
Child settings blocks.
Definition: settings.h:143
#define LIST_HEAD_INIT(list)
Initialise a static list head.
Definition: list.h:31
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

"netX" settings

Definition at line 412 of file netdev_settings.c.

Referenced by netdev_redirect_settings_init().

◆ __settings_applicator

struct settings_applicator netdev_applicator __settings_applicator
Initial value:
= {
}
static int apply_netdev_settings(void)
Apply network device settings.

Network device settings applicator.

Definition at line 496 of file netdev_settings.c.