]> git.proxmox.com Git - mirror_iproute2.git/blame - ip/link_xfrm.c
rdma: update uapi headers
[mirror_iproute2.git] / ip / link_xfrm.c
CommitLineData
286446c1
ME
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * link_xfrm.c Virtual XFRM Interface driver module
4 *
5 * Authors: Matt Ellison <matt@arroyo.io>
6 */
7
8#include <string.h>
9#include <linux/if_link.h>
10
11#include "rt_names.h"
12#include "utils.h"
13#include "ip_common.h"
14#include "tunnel.h"
15
16static void xfrm_print_help(struct link_util *lu, int argc, char **argv,
17 FILE *f)
18{
19 fprintf(f, "Usage: ... %-4s dev PHYS_DEV [ if_id IF-ID ]\n", lu->id);
20 fprintf(f, "\nWhere: IF-ID := { 0x0..0xffffffff }\n");
21}
22
23static int xfrm_parse_opt(struct link_util *lu, int argc, char **argv,
24 struct nlmsghdr *n)
25{
26 unsigned int link = 0;
27 __u32 if_id = 0;
28
29 while (argc > 0) {
30 if (!matches(*argv, "dev")) {
31 NEXT_ARG();
32 link = ll_name_to_index(*argv);
33 if (!link)
34 exit(nodev(*argv));
35 } else if (!matches(*argv, "if_id")) {
36 NEXT_ARG();
37 if (!get_u32(&if_id, *argv, 0))
38 addattr32(n, 1024, IFLA_XFRM_IF_ID, if_id);
39 } else {
40 xfrm_print_help(lu, argc, argv, stderr);
41 return -1;
42 }
43 argc--; argv++;
44 }
45
46 if (link) {
47 addattr32(n, 1024, IFLA_XFRM_LINK, link);
48 } else {
49 fprintf(stderr, "must specify physical device\n");
50 return -1;
51 }
52
53 return 0;
54}
55
56static void xfrm_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
57{
58
59 if (!tb)
60 return;
61
62 if (tb[IFLA_XFRM_IF_ID]) {
63 __u32 id = rta_getattr_u32(tb[IFLA_XFRM_IF_ID]);
64
65 print_0xhex(PRINT_ANY, "if_id", "if_id %#llx ", id);
66
67 }
68
69}
70
71struct link_util xfrm_link_util = {
72 .id = "xfrm",
73 .maxattr = IFLA_XFRM_MAX,
74 .parse_opt = xfrm_parse_opt,
75 .print_opt = xfrm_print_opt,
76 .print_help = xfrm_print_help,
77};