iPXE
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.
static int parse_net_args (char *args)
 Parse –net arguments.
static int parse_settings_args (char *args)
 Parse –settings arguments.
void linux_args_parse ()
 Parse passed command-line arguments.
void linux_args_cleanup (int flags __unused)
 Clean up requests and settings.
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.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER )

◆ parse_kv()

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}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
u8 token
Definition CIB_PRM.h:14
pseudo_bit_t value[0x00020]
Definition arbel.h:2
const char * name
Definition ath9k_hw.c:1986
#define DBG(...)
Print a debugging message.
Definition compiler.h:498
#define list_add(new, head)
Add a new entry to the head of a list.
Definition list.h:70
void * malloc(size_t size)
Allocate memory.
Definition malloc.c:621
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
A device request setting.
Definition linux.h:109
struct list_head list
List node.
Definition linux.h:117
A setting.
Definition settings.h:24
const char * name
Name.
Definition settings.h:29

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

Referenced by parse_net_args(), and parse_settings_args().

◆ parse_net_args()

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);
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:3
struct list_head linux_device_requests
List of requested devices.
static int parse_kv(char *kv, struct list_head *list)
Parse k1=v1[,k2=v2]* into linux_settings.
Definition linux_args.c:42
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition list.h:94
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition list.h:46
size_t strlen(const char *src)
Get length of string.
Definition string.c:244
A device request.
Definition linux.h:99
struct list_head settings
List of settings.
Definition linux.h:105
struct list_head list
List node.
Definition linux.h:103
char * driver
Driver name.
Definition linux.h:101
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition vsprintf.c:465

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()

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}
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}
static int options
Definition 3c515.c:286
int getopt_long(int argc, char *const argv[], const char *optstring, const struct option *longopts, int *longindex)
Parse command-line options.
Definition getopt.c:230
char * optarg
Option argument.
Definition getopt.c:44
static void reset_getopt(void)
Reset getopt() internal state.
Definition getopt.h:90
static int parse_settings_args(char *args)
Parse –settings arguments.
Definition linux_args.c:111
int linux_argc
Definition linux_args.c:29
char ** linux_argv
Definition linux_args.c:30
static int parse_net_args(char *args)
Parse –net arguments.
Definition linux_args.c:78

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

Referenced by __startup_fn().

◆ 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}
u8 request[0]
List of IEs requested.
Definition ieee80211.h:2
#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:459
#define list_del(list)
Delete an entry from a list.
Definition list.h:120
static void(* free)(struct refcnt *refcnt))
Definition refcnt.h:55

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

Referenced by __startup_fn().

◆ __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}
}

Supported command-line options.

Definition at line 33 of file linux_args.c.

33 {
34 {"net", 1, NULL, 'n'},
35 {"settings", 1, NULL, 's'},
36 {NULL, 0, NULL, 0}
37};