xref: /aosp_15_r20/external/iproute2/tipc/media.c (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker /*
2*de1e4e89SAndroid Build Coastguard Worker  * media.c	TIPC link functionality.
3*de1e4e89SAndroid Build Coastguard Worker  *
4*de1e4e89SAndroid Build Coastguard Worker  *		This program is free software; you can redistribute it and/or
5*de1e4e89SAndroid Build Coastguard Worker  *		modify it under the terms of the GNU General Public License
6*de1e4e89SAndroid Build Coastguard Worker  *		as published by the Free Software Foundation; either version
7*de1e4e89SAndroid Build Coastguard Worker  *		2 of the License, or (at your option) any later version.
8*de1e4e89SAndroid Build Coastguard Worker  *
9*de1e4e89SAndroid Build Coastguard Worker  * Authors:	Richard Alpe <[email protected]>
10*de1e4e89SAndroid Build Coastguard Worker  */
11*de1e4e89SAndroid Build Coastguard Worker 
12*de1e4e89SAndroid Build Coastguard Worker #include <stdio.h>
13*de1e4e89SAndroid Build Coastguard Worker #include <stdlib.h>
14*de1e4e89SAndroid Build Coastguard Worker #include <string.h>
15*de1e4e89SAndroid Build Coastguard Worker #include <errno.h>
16*de1e4e89SAndroid Build Coastguard Worker 
17*de1e4e89SAndroid Build Coastguard Worker #include <linux/tipc_netlink.h>
18*de1e4e89SAndroid Build Coastguard Worker #include <linux/tipc.h>
19*de1e4e89SAndroid Build Coastguard Worker #include <linux/genetlink.h>
20*de1e4e89SAndroid Build Coastguard Worker #include <libmnl/libmnl.h>
21*de1e4e89SAndroid Build Coastguard Worker 
22*de1e4e89SAndroid Build Coastguard Worker #include "cmdl.h"
23*de1e4e89SAndroid Build Coastguard Worker #include "msg.h"
24*de1e4e89SAndroid Build Coastguard Worker #include "media.h"
25*de1e4e89SAndroid Build Coastguard Worker 
media_list_cb(const struct nlmsghdr * nlh,void * data)26*de1e4e89SAndroid Build Coastguard Worker static int media_list_cb(const struct nlmsghdr *nlh, void *data)
27*de1e4e89SAndroid Build Coastguard Worker {
28*de1e4e89SAndroid Build Coastguard Worker 	struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
29*de1e4e89SAndroid Build Coastguard Worker 	struct nlattr *info[TIPC_NLA_MAX + 1] = {};
30*de1e4e89SAndroid Build Coastguard Worker 	struct nlattr *attrs[TIPC_NLA_MEDIA_MAX + 1] = {};
31*de1e4e89SAndroid Build Coastguard Worker 
32*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_parse(nlh, sizeof(*genl), parse_attrs, info);
33*de1e4e89SAndroid Build Coastguard Worker 	if (!info[TIPC_NLA_MEDIA])
34*de1e4e89SAndroid Build Coastguard Worker 		return MNL_CB_ERROR;
35*de1e4e89SAndroid Build Coastguard Worker 
36*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_parse_nested(info[TIPC_NLA_MEDIA], parse_attrs, attrs);
37*de1e4e89SAndroid Build Coastguard Worker 	if (!attrs[TIPC_NLA_MEDIA_NAME])
38*de1e4e89SAndroid Build Coastguard Worker 		return MNL_CB_ERROR;
39*de1e4e89SAndroid Build Coastguard Worker 
40*de1e4e89SAndroid Build Coastguard Worker 	printf("%s\n", mnl_attr_get_str(attrs[TIPC_NLA_MEDIA_NAME]));
41*de1e4e89SAndroid Build Coastguard Worker 
42*de1e4e89SAndroid Build Coastguard Worker 	return MNL_CB_OK;
43*de1e4e89SAndroid Build Coastguard Worker }
44*de1e4e89SAndroid Build Coastguard Worker 
cmd_media_list(struct nlmsghdr * nlh,const struct cmd * cmd,struct cmdl * cmdl,void * data)45*de1e4e89SAndroid Build Coastguard Worker static int cmd_media_list(struct nlmsghdr *nlh, const struct cmd *cmd,
46*de1e4e89SAndroid Build Coastguard Worker 			 struct cmdl *cmdl, void *data)
47*de1e4e89SAndroid Build Coastguard Worker {
48*de1e4e89SAndroid Build Coastguard Worker 	char buf[MNL_SOCKET_BUFFER_SIZE];
49*de1e4e89SAndroid Build Coastguard Worker 
50*de1e4e89SAndroid Build Coastguard Worker 	if (help_flag) {
51*de1e4e89SAndroid Build Coastguard Worker 		fprintf(stderr, "Usage: %s media list\n", cmdl->argv[0]);
52*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
53*de1e4e89SAndroid Build Coastguard Worker 	}
54*de1e4e89SAndroid Build Coastguard Worker 
55*de1e4e89SAndroid Build Coastguard Worker 	if (!(nlh = msg_init(buf, TIPC_NL_MEDIA_GET))) {
56*de1e4e89SAndroid Build Coastguard Worker 		fprintf(stderr, "error, message initialisation failed\n");
57*de1e4e89SAndroid Build Coastguard Worker 		return -1;
58*de1e4e89SAndroid Build Coastguard Worker 	}
59*de1e4e89SAndroid Build Coastguard Worker 
60*de1e4e89SAndroid Build Coastguard Worker 	return msg_dumpit(nlh, media_list_cb, NULL);
61*de1e4e89SAndroid Build Coastguard Worker }
62*de1e4e89SAndroid Build Coastguard Worker 
media_get_cb(const struct nlmsghdr * nlh,void * data)63*de1e4e89SAndroid Build Coastguard Worker static int media_get_cb(const struct nlmsghdr *nlh, void *data)
64*de1e4e89SAndroid Build Coastguard Worker {
65*de1e4e89SAndroid Build Coastguard Worker 	int *prop = data;
66*de1e4e89SAndroid Build Coastguard Worker 	struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
67*de1e4e89SAndroid Build Coastguard Worker 	struct nlattr *info[TIPC_NLA_MAX + 1] = {};
68*de1e4e89SAndroid Build Coastguard Worker 	struct nlattr *attrs[TIPC_NLA_MEDIA_MAX + 1] = {};
69*de1e4e89SAndroid Build Coastguard Worker 	struct nlattr *props[TIPC_NLA_PROP_MAX + 1] = {};
70*de1e4e89SAndroid Build Coastguard Worker 
71*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_parse(nlh, sizeof(*genl), parse_attrs, info);
72*de1e4e89SAndroid Build Coastguard Worker 	if (!info[TIPC_NLA_MEDIA])
73*de1e4e89SAndroid Build Coastguard Worker 		return MNL_CB_ERROR;
74*de1e4e89SAndroid Build Coastguard Worker 
75*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_parse_nested(info[TIPC_NLA_MEDIA], parse_attrs, attrs);
76*de1e4e89SAndroid Build Coastguard Worker 	if (!attrs[TIPC_NLA_MEDIA_PROP])
77*de1e4e89SAndroid Build Coastguard Worker 		return MNL_CB_ERROR;
78*de1e4e89SAndroid Build Coastguard Worker 
79*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_parse_nested(attrs[TIPC_NLA_MEDIA_PROP], parse_attrs, props);
80*de1e4e89SAndroid Build Coastguard Worker 	if (!props[*prop])
81*de1e4e89SAndroid Build Coastguard Worker 		return MNL_CB_ERROR;
82*de1e4e89SAndroid Build Coastguard Worker 
83*de1e4e89SAndroid Build Coastguard Worker 	printf("%u\n", mnl_attr_get_u32(props[*prop]));
84*de1e4e89SAndroid Build Coastguard Worker 
85*de1e4e89SAndroid Build Coastguard Worker 	return MNL_CB_OK;
86*de1e4e89SAndroid Build Coastguard Worker }
87*de1e4e89SAndroid Build Coastguard Worker 
cmd_media_get_prop(struct nlmsghdr * nlh,const struct cmd * cmd,struct cmdl * cmdl,void * data)88*de1e4e89SAndroid Build Coastguard Worker static int cmd_media_get_prop(struct nlmsghdr *nlh, const struct cmd *cmd,
89*de1e4e89SAndroid Build Coastguard Worker 			      struct cmdl *cmdl, void *data)
90*de1e4e89SAndroid Build Coastguard Worker {
91*de1e4e89SAndroid Build Coastguard Worker 	int prop;
92*de1e4e89SAndroid Build Coastguard Worker 	char buf[MNL_SOCKET_BUFFER_SIZE];
93*de1e4e89SAndroid Build Coastguard Worker 	struct nlattr *nest;
94*de1e4e89SAndroid Build Coastguard Worker 	struct opt *opt;
95*de1e4e89SAndroid Build Coastguard Worker 	struct opt opts[] = {
96*de1e4e89SAndroid Build Coastguard Worker 		{ "media",		OPT_KEYVAL,	NULL },
97*de1e4e89SAndroid Build Coastguard Worker 		{ NULL }
98*de1e4e89SAndroid Build Coastguard Worker 	};
99*de1e4e89SAndroid Build Coastguard Worker 
100*de1e4e89SAndroid Build Coastguard Worker 	if (strcmp(cmd->cmd, "priority") == 0)
101*de1e4e89SAndroid Build Coastguard Worker 		prop = TIPC_NLA_PROP_PRIO;
102*de1e4e89SAndroid Build Coastguard Worker 	else if ((strcmp(cmd->cmd, "tolerance") == 0))
103*de1e4e89SAndroid Build Coastguard Worker 		prop = TIPC_NLA_PROP_TOL;
104*de1e4e89SAndroid Build Coastguard Worker 	else if ((strcmp(cmd->cmd, "window") == 0))
105*de1e4e89SAndroid Build Coastguard Worker 		prop = TIPC_NLA_PROP_WIN;
106*de1e4e89SAndroid Build Coastguard Worker 	else
107*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
108*de1e4e89SAndroid Build Coastguard Worker 
109*de1e4e89SAndroid Build Coastguard Worker 	if (help_flag) {
110*de1e4e89SAndroid Build Coastguard Worker 		(cmd->help)(cmdl);
111*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
112*de1e4e89SAndroid Build Coastguard Worker 	}
113*de1e4e89SAndroid Build Coastguard Worker 
114*de1e4e89SAndroid Build Coastguard Worker 	if (parse_opts(opts, cmdl) < 0)
115*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
116*de1e4e89SAndroid Build Coastguard Worker 
117*de1e4e89SAndroid Build Coastguard Worker 	if (!(nlh = msg_init(buf, TIPC_NL_MEDIA_GET))) {
118*de1e4e89SAndroid Build Coastguard Worker 		fprintf(stderr, "error, message initialisation failed\n");
119*de1e4e89SAndroid Build Coastguard Worker 		return -1;
120*de1e4e89SAndroid Build Coastguard Worker 	}
121*de1e4e89SAndroid Build Coastguard Worker 
122*de1e4e89SAndroid Build Coastguard Worker 	if (!(opt = get_opt(opts, "media"))) {
123*de1e4e89SAndroid Build Coastguard Worker 		fprintf(stderr, "error, missing media\n");
124*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
125*de1e4e89SAndroid Build Coastguard Worker 	}
126*de1e4e89SAndroid Build Coastguard Worker 	nest = mnl_attr_nest_start(nlh, TIPC_NLA_MEDIA);
127*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_put_strz(nlh, TIPC_NLA_MEDIA_NAME, opt->val);
128*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_nest_end(nlh, nest);
129*de1e4e89SAndroid Build Coastguard Worker 
130*de1e4e89SAndroid Build Coastguard Worker 	return msg_doit(nlh, media_get_cb, &prop);
131*de1e4e89SAndroid Build Coastguard Worker }
132*de1e4e89SAndroid Build Coastguard Worker 
cmd_media_get_help(struct cmdl * cmdl)133*de1e4e89SAndroid Build Coastguard Worker static void cmd_media_get_help(struct cmdl *cmdl)
134*de1e4e89SAndroid Build Coastguard Worker {
135*de1e4e89SAndroid Build Coastguard Worker 	fprintf(stderr, "Usage: %s media get PPROPERTY media MEDIA\n\n"
136*de1e4e89SAndroid Build Coastguard Worker 		"PROPERTIES\n"
137*de1e4e89SAndroid Build Coastguard Worker 		" tolerance             - Get media tolerance\n"
138*de1e4e89SAndroid Build Coastguard Worker 		" priority              - Get media priority\n"
139*de1e4e89SAndroid Build Coastguard Worker 		" window                - Get media window\n",
140*de1e4e89SAndroid Build Coastguard Worker 		cmdl->argv[0]);
141*de1e4e89SAndroid Build Coastguard Worker }
142*de1e4e89SAndroid Build Coastguard Worker 
cmd_media_get(struct nlmsghdr * nlh,const struct cmd * cmd,struct cmdl * cmdl,void * data)143*de1e4e89SAndroid Build Coastguard Worker static int cmd_media_get(struct nlmsghdr *nlh, const struct cmd *cmd,
144*de1e4e89SAndroid Build Coastguard Worker 			struct cmdl *cmdl, void *data)
145*de1e4e89SAndroid Build Coastguard Worker {
146*de1e4e89SAndroid Build Coastguard Worker 	const struct cmd cmds[] = {
147*de1e4e89SAndroid Build Coastguard Worker 		{ "priority",	cmd_media_get_prop,	cmd_media_get_help },
148*de1e4e89SAndroid Build Coastguard Worker 		{ "tolerance",	cmd_media_get_prop,	cmd_media_get_help },
149*de1e4e89SAndroid Build Coastguard Worker 		{ "window",	cmd_media_get_prop,	cmd_media_get_help },
150*de1e4e89SAndroid Build Coastguard Worker 		{ NULL }
151*de1e4e89SAndroid Build Coastguard Worker 	};
152*de1e4e89SAndroid Build Coastguard Worker 
153*de1e4e89SAndroid Build Coastguard Worker 	return run_cmd(nlh, cmd, cmds, cmdl, NULL);
154*de1e4e89SAndroid Build Coastguard Worker }
155*de1e4e89SAndroid Build Coastguard Worker 
cmd_media_set_help(struct cmdl * cmdl)156*de1e4e89SAndroid Build Coastguard Worker static void cmd_media_set_help(struct cmdl *cmdl)
157*de1e4e89SAndroid Build Coastguard Worker {
158*de1e4e89SAndroid Build Coastguard Worker 	fprintf(stderr, "Usage: %s media set PPROPERTY media MEDIA\n\n"
159*de1e4e89SAndroid Build Coastguard Worker 		"PROPERTIES\n"
160*de1e4e89SAndroid Build Coastguard Worker 		" tolerance TOLERANCE   - Set media tolerance\n"
161*de1e4e89SAndroid Build Coastguard Worker 		" priority PRIORITY     - Set media priority\n"
162*de1e4e89SAndroid Build Coastguard Worker 		" window WINDOW         - Set media window\n",
163*de1e4e89SAndroid Build Coastguard Worker 		cmdl->argv[0]);
164*de1e4e89SAndroid Build Coastguard Worker }
165*de1e4e89SAndroid Build Coastguard Worker 
cmd_media_set_prop(struct nlmsghdr * nlh,const struct cmd * cmd,struct cmdl * cmdl,void * data)166*de1e4e89SAndroid Build Coastguard Worker static int cmd_media_set_prop(struct nlmsghdr *nlh, const struct cmd *cmd,
167*de1e4e89SAndroid Build Coastguard Worker 			 struct cmdl *cmdl, void *data)
168*de1e4e89SAndroid Build Coastguard Worker {
169*de1e4e89SAndroid Build Coastguard Worker 	int val;
170*de1e4e89SAndroid Build Coastguard Worker 	int prop;
171*de1e4e89SAndroid Build Coastguard Worker 	char buf[MNL_SOCKET_BUFFER_SIZE];
172*de1e4e89SAndroid Build Coastguard Worker 	struct nlattr *props;
173*de1e4e89SAndroid Build Coastguard Worker 	struct nlattr *attrs;
174*de1e4e89SAndroid Build Coastguard Worker 	struct opt *opt;
175*de1e4e89SAndroid Build Coastguard Worker 	struct opt opts[] = {
176*de1e4e89SAndroid Build Coastguard Worker 		{ "media",		OPT_KEYVAL,	NULL },
177*de1e4e89SAndroid Build Coastguard Worker 		{ NULL }
178*de1e4e89SAndroid Build Coastguard Worker 	};
179*de1e4e89SAndroid Build Coastguard Worker 
180*de1e4e89SAndroid Build Coastguard Worker 	if (strcmp(cmd->cmd, "priority") == 0)
181*de1e4e89SAndroid Build Coastguard Worker 		prop = TIPC_NLA_PROP_PRIO;
182*de1e4e89SAndroid Build Coastguard Worker 	else if ((strcmp(cmd->cmd, "tolerance") == 0))
183*de1e4e89SAndroid Build Coastguard Worker 		prop = TIPC_NLA_PROP_TOL;
184*de1e4e89SAndroid Build Coastguard Worker 	else if ((strcmp(cmd->cmd, "window") == 0))
185*de1e4e89SAndroid Build Coastguard Worker 		prop = TIPC_NLA_PROP_WIN;
186*de1e4e89SAndroid Build Coastguard Worker 	else
187*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
188*de1e4e89SAndroid Build Coastguard Worker 
189*de1e4e89SAndroid Build Coastguard Worker 	if (help_flag) {
190*de1e4e89SAndroid Build Coastguard Worker 		(cmd->help)(cmdl);
191*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
192*de1e4e89SAndroid Build Coastguard Worker 	}
193*de1e4e89SAndroid Build Coastguard Worker 
194*de1e4e89SAndroid Build Coastguard Worker 	if (cmdl->optind >= cmdl->argc) {
195*de1e4e89SAndroid Build Coastguard Worker 		fprintf(stderr, "error, missing value\n");
196*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
197*de1e4e89SAndroid Build Coastguard Worker 	}
198*de1e4e89SAndroid Build Coastguard Worker 	val = atoi(shift_cmdl(cmdl));
199*de1e4e89SAndroid Build Coastguard Worker 
200*de1e4e89SAndroid Build Coastguard Worker 	if (parse_opts(opts, cmdl) < 0)
201*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
202*de1e4e89SAndroid Build Coastguard Worker 
203*de1e4e89SAndroid Build Coastguard Worker 	if (!(nlh = msg_init(buf, TIPC_NL_MEDIA_SET))) {
204*de1e4e89SAndroid Build Coastguard Worker 		fprintf(stderr, "error, message initialisation failed\n");
205*de1e4e89SAndroid Build Coastguard Worker 		return -1;
206*de1e4e89SAndroid Build Coastguard Worker 	}
207*de1e4e89SAndroid Build Coastguard Worker 	attrs = mnl_attr_nest_start(nlh, TIPC_NLA_MEDIA);
208*de1e4e89SAndroid Build Coastguard Worker 
209*de1e4e89SAndroid Build Coastguard Worker 	if (!(opt = get_opt(opts, "media"))) {
210*de1e4e89SAndroid Build Coastguard Worker 		fprintf(stderr, "error, missing media\n");
211*de1e4e89SAndroid Build Coastguard Worker 		return -EINVAL;
212*de1e4e89SAndroid Build Coastguard Worker 	}
213*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_put_strz(nlh, TIPC_NLA_MEDIA_NAME, opt->val);
214*de1e4e89SAndroid Build Coastguard Worker 
215*de1e4e89SAndroid Build Coastguard Worker 	props = mnl_attr_nest_start(nlh, TIPC_NLA_MEDIA_PROP);
216*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_put_u32(nlh, prop, val);
217*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_nest_end(nlh, props);
218*de1e4e89SAndroid Build Coastguard Worker 
219*de1e4e89SAndroid Build Coastguard Worker 	mnl_attr_nest_end(nlh, attrs);
220*de1e4e89SAndroid Build Coastguard Worker 
221*de1e4e89SAndroid Build Coastguard Worker 	return msg_doit(nlh, NULL, NULL);
222*de1e4e89SAndroid Build Coastguard Worker }
223*de1e4e89SAndroid Build Coastguard Worker 
cmd_media_set(struct nlmsghdr * nlh,const struct cmd * cmd,struct cmdl * cmdl,void * data)224*de1e4e89SAndroid Build Coastguard Worker static int cmd_media_set(struct nlmsghdr *nlh, const struct cmd *cmd,
225*de1e4e89SAndroid Build Coastguard Worker 			 struct cmdl *cmdl, void *data)
226*de1e4e89SAndroid Build Coastguard Worker {
227*de1e4e89SAndroid Build Coastguard Worker 	const struct cmd cmds[] = {
228*de1e4e89SAndroid Build Coastguard Worker 		{ "priority",	cmd_media_set_prop,	cmd_media_set_help },
229*de1e4e89SAndroid Build Coastguard Worker 		{ "tolerance",	cmd_media_set_prop,	cmd_media_set_help },
230*de1e4e89SAndroid Build Coastguard Worker 		{ "window",	cmd_media_set_prop,	cmd_media_set_help },
231*de1e4e89SAndroid Build Coastguard Worker 		{ NULL }
232*de1e4e89SAndroid Build Coastguard Worker 	};
233*de1e4e89SAndroid Build Coastguard Worker 
234*de1e4e89SAndroid Build Coastguard Worker 	return run_cmd(nlh, cmd, cmds, cmdl, NULL);
235*de1e4e89SAndroid Build Coastguard Worker }
236*de1e4e89SAndroid Build Coastguard Worker 
cmd_media_help(struct cmdl * cmdl)237*de1e4e89SAndroid Build Coastguard Worker void cmd_media_help(struct cmdl *cmdl)
238*de1e4e89SAndroid Build Coastguard Worker {
239*de1e4e89SAndroid Build Coastguard Worker 	fprintf(stderr,
240*de1e4e89SAndroid Build Coastguard Worker 		"Usage: %s media COMMAND [ARGS] ...\n"
241*de1e4e89SAndroid Build Coastguard Worker 		"\n"
242*de1e4e89SAndroid Build Coastguard Worker 		"Commands:\n"
243*de1e4e89SAndroid Build Coastguard Worker 		" list                  - List active media types\n"
244*de1e4e89SAndroid Build Coastguard Worker 		" get                   - Get various media properties\n"
245*de1e4e89SAndroid Build Coastguard Worker 		" set                   - Set various media properties\n",
246*de1e4e89SAndroid Build Coastguard Worker 		cmdl->argv[0]);
247*de1e4e89SAndroid Build Coastguard Worker }
248*de1e4e89SAndroid Build Coastguard Worker 
cmd_media(struct nlmsghdr * nlh,const struct cmd * cmd,struct cmdl * cmdl,void * data)249*de1e4e89SAndroid Build Coastguard Worker int cmd_media(struct nlmsghdr *nlh, const struct cmd *cmd, struct cmdl *cmdl,
250*de1e4e89SAndroid Build Coastguard Worker 	     void *data)
251*de1e4e89SAndroid Build Coastguard Worker {
252*de1e4e89SAndroid Build Coastguard Worker 	const struct cmd cmds[] = {
253*de1e4e89SAndroid Build Coastguard Worker 		{ "get",	cmd_media_get,	cmd_media_get_help },
254*de1e4e89SAndroid Build Coastguard Worker 		{ "list",	cmd_media_list,	NULL },
255*de1e4e89SAndroid Build Coastguard Worker 		{ "set",	cmd_media_set,	cmd_media_set_help },
256*de1e4e89SAndroid Build Coastguard Worker 		{ NULL }
257*de1e4e89SAndroid Build Coastguard Worker 	};
258*de1e4e89SAndroid Build Coastguard Worker 
259*de1e4e89SAndroid Build Coastguard Worker 	return run_cmd(nlh, cmd, cmds, cmdl, NULL);
260*de1e4e89SAndroid Build Coastguard Worker }
261