iPXE
Functions | Variables
linux_args.c File Reference
#include <getopt.h>
#include <string.h>
#include <stdio.h>
#include <ipxe/settings.h>
#include <ipxe/linux.h>
#include <ipxe/malloc.h>
#include <ipxe/init.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER)
 
static int parse_kv (char *kv, struct list_head *list)
 Parse k1=v1[,k2=v2]* into linux_settings. More...
 
static int parse_net_args (char *args)
 Parse –net arguments. More...
 
static int parse_settings_args (char *args)
 Parse –settings arguments. More...
 
void linux_args_parse ()
 Parse passed command-line arguments. More...
 
void linux_args_cleanup (int flags __unused)
 Clean up requests and settings. More...
 
struct startup_fn startup_linux_args __startup_fn (STARTUP_EARLY)
 

Variables

int linux_argc
 
char ** linux_argv
 
static struct option options []
 Supported command-line options. More...
 

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER  )

◆ parse_kv()

static int parse_kv ( char *  kv,
struct list_head list 
)
static

Parse k1=v1[,k2=v2]* into linux_settings.

Definition at line 42 of file linux_args.c.

43 {
44  char *token;
45  char *name;
46  char *value;
47  struct linux_setting *setting;
48 
49  while ((token = strsep(&kv, ",")) != NULL) {
50  name = strsep(&token, "=");
51  if (name == NULL)
52  continue;
53  value = token;
54  if (value == NULL) {
55  DBG("Bad parameter: '%s'\n", name);
56  continue;
57  }
58 
59  setting = malloc(sizeof(*setting));
60 
61  if (! setting)
62  return -1;
63 
64  setting->name = name;
65  setting->value = value;
66  setting->applied = 0;
67  list_add(&setting->list, list);
68  }
69 
70  return 0;
71 }
const char * name
Definition: ath9k_hw.c:1984
struct list_head list
List node.
Definition: linux.h:116
#define list_add(new, head)
Add a new entry to the head of a list.
Definition: list.h:69
const char * name
Name.
Definition: settings.h:28
A device request setting.
Definition: linux.h:108
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
void * malloc(size_t size)
Allocate memory.
Definition: malloc.c:583
u8 token
Definition: CIB_PRM.h:42
A setting.
Definition: settings.h:23
char * strsep(char **s, const char *ct)
strsep - Split a string into tokens @s: The string to be searched @ct: The characters to search for
Definition: stringextra.c:73
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498
#define NULL
NULL pointer (VOID *)
Definition: Base.h:362

References DBG, linux_setting::list, list_add, malloc(), setting::name, name, NULL, strsep(), token, and value.

Referenced by parse_net_args(), and parse_settings_args().

◆ parse_net_args()

static int parse_net_args ( char *  args)
static

Parse –net arguments.

Format is –net driver_name[,name=value]*

Definition at line 78 of file linux_args.c.

79 {
80  char *driver;
81  struct linux_device_request *dev_request;
82  int rc;
83 
84  driver = strsep(&args, ",");
85 
86  if (strlen(driver) == 0) {
87  printf("Missing driver name");
88  return -1;
89  }
90 
91  dev_request = malloc(sizeof(*dev_request));
92 
93  dev_request->driver = driver;
94  INIT_LIST_HEAD(&dev_request->settings);
95  list_add_tail(&dev_request->list, &linux_device_requests);
96 
97  /* Parse rest of the settings */
98  rc = parse_kv(args, &dev_request->settings);
99 
100  if (rc)
101  printf("Parsing net settings failed");
102 
103  return rc;
104 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition: vsprintf.c:464
A device request.
Definition: linux.h:98
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition: list.h:93
static int parse_kv(char *kv, struct list_head *list)
Parse k1=v1[,k2=v2]* into linux_settings.
Definition: linux_args.c:42
size_t strlen(const char *src)
Get length of string.
Definition: string.c:243
char * driver
Driver name.
Definition: linux.h:100
void * malloc(size_t size)
Allocate memory.
Definition: malloc.c:583
char * strsep(char **s, const char *ct)
strsep - Split a string into tokens @s: The string to be searched @ct: The characters to search for
Definition: stringextra.c:73
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition: list.h:45
struct list_head list
List node.
Definition: linux.h:102
struct list_head settings
List of settings.
Definition: linux.h:104
struct list_head linux_device_requests
List of requested devices.

References linux_device_request::driver, INIT_LIST_HEAD, linux_device_requests, linux_device_request::list, list_add_tail, malloc(), parse_kv(), printf(), rc, linux_device_request::settings, strlen(), and strsep().

Referenced by linux_args_parse().

◆ parse_settings_args()

static int parse_settings_args ( char *  args)
static

Parse –settings arguments.

Format is –settings name=value[,name=value]*

Definition at line 111 of file linux_args.c.

112 {
113  return parse_kv(args, &linux_global_settings);
114 }
static int parse_kv(char *kv, struct list_head *list)
Parse k1=v1[,k2=v2]* into linux_settings.
Definition: linux_args.c:42
struct list_head linux_global_settings
List of global settings to apply.

References linux_global_settings, and parse_kv().

Referenced by linux_args_parse().

◆ linux_args_parse()

void linux_args_parse ( )

Parse passed command-line arguments.

Definition at line 118 of file linux_args.c.

119 {
120  int c;
121  int rc;
122 
123  reset_getopt();
124  while (1) {
125  int option_index = 0;
126 
127  c = getopt_long(linux_argc, linux_argv, "", options, &option_index);
128  if (c == -1)
129  break;
130 
131  switch (c) {
132  case 'n':
133  if ((rc = parse_net_args(optarg)) != 0)
134  return;
135  break;
136  case 's':
137  if ((rc = parse_settings_args(optarg)) != 0)
138  return;
139  break;
140  default:
141  return;
142  }
143  }
144 
145  return;
146 }
uint32_t c
Definition: md4.c:30
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
static int parse_settings_args(char *args)
Parse –settings arguments.
Definition: linux_args.c:111
char ** linux_argv
Definition: linux_args.c:30
static void reset_getopt(void)
Reset getopt() internal state.
Definition: getopt.h:89
int linux_argc
Definition: linux_args.c:29
int getopt_long(int argc, char *const argv[], const char *optstring, const struct option *longopts, int *longindex)
Parse command-line options.
Definition: getopt.c:229
static struct option options[]
Supported command-line options.
Definition: linux_args.c:33
static int parse_net_args(char *args)
Parse –net arguments.
Definition: linux_args.c:78
char * optarg
Option argument.
Definition: getopt.c:43

References c, getopt_long(), linux_argc, linux_argv, optarg, options, parse_net_args(), parse_settings_args(), rc, and reset_getopt().

◆ linux_args_cleanup()

void linux_args_cleanup ( int flags  __unused)

Clean up requests and settings.

Definition at line 149 of file linux_args.c.

150 {
152  struct linux_device_request *rtmp;
153  struct linux_setting *setting;
154  struct linux_setting *stmp;
155 
156  /* Clean up requests and their settings */
158  list_for_each_entry_safe(setting, stmp, &request->settings, list) {
159  list_del(&setting->list);
160  free(setting);
161  }
162  list_del(&request->list);
163  free(request);
164  }
165 
166  /* Clean up global settings */
168  list_del(&setting->list);
169  free(setting);
170  }
171 }
struct list_head list
List node.
Definition: linux.h:116
A device request.
Definition: linux.h:98
#define list_del(list)
Delete an entry from a list.
Definition: list.h:119
A device request setting.
Definition: linux.h:108
#define list_for_each_entry_safe(pos, tmp, head, member)
Iterate over entries in a list, safe against deletion of the current entry.
Definition: list.h:447
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:54
A setting.
Definition: settings.h:23
struct list_head linux_global_settings
List of global settings to apply.
u8 request[0]
List of IEs requested.
Definition: ieee80211.h:16
struct list_head linux_device_requests
List of requested devices.

References free, linux_device_requests, linux_global_settings, linux_setting::list, list_del, list_for_each_entry_safe, and request.

◆ __startup_fn()

struct startup_fn startup_linux_args __startup_fn ( STARTUP_EARLY  )

Variable Documentation

◆ linux_argc

int linux_argc

Definition at line 29 of file linux_args.c.

Referenced by linux_args_parse().

◆ linux_argv

char** linux_argv

Definition at line 30 of file linux_args.c.

Referenced by linux_args_parse().

◆ options

struct option options[]
static
Initial value:
= {
{"net", 1, NULL, 'n'},
{"settings", 1, NULL, 's'},
{NULL, 0, NULL, 0}
}
#define NULL
NULL pointer (VOID *)
Definition: Base.h:362

Supported command-line options.

Definition at line 33 of file linux_args.c.

Referenced by linux_args_parse().