1 // SPDX-License-Identifier: GPL-2.0
2 #include <net/genetlink.h>
4 #include <net/netns/generic.h>
5 #include <uapi/linux/genetlink.h>
8 static const struct nla_policy ila_nl_policy
[ILA_ATTR_MAX
+ 1] = {
9 [ILA_ATTR_LOCATOR
] = { .type
= NLA_U64
, },
10 [ILA_ATTR_LOCATOR_MATCH
] = { .type
= NLA_U64
, },
11 [ILA_ATTR_IFINDEX
] = { .type
= NLA_U32
, },
12 [ILA_ATTR_CSUM_MODE
] = { .type
= NLA_U8
, },
13 [ILA_ATTR_IDENT_TYPE
] = { .type
= NLA_U8
, },
16 static const struct genl_ops ila_nl_ops
[] = {
19 .validate
= GENL_DONT_VALIDATE_STRICT
| GENL_DONT_VALIDATE_DUMP
,
20 .doit
= ila_xlat_nl_cmd_add_mapping
,
21 .flags
= GENL_ADMIN_PERM
,
25 .validate
= GENL_DONT_VALIDATE_STRICT
| GENL_DONT_VALIDATE_DUMP
,
26 .doit
= ila_xlat_nl_cmd_del_mapping
,
27 .flags
= GENL_ADMIN_PERM
,
31 .validate
= GENL_DONT_VALIDATE_STRICT
| GENL_DONT_VALIDATE_DUMP
,
32 .doit
= ila_xlat_nl_cmd_flush
,
33 .flags
= GENL_ADMIN_PERM
,
37 .validate
= GENL_DONT_VALIDATE_STRICT
| GENL_DONT_VALIDATE_DUMP
,
38 .doit
= ila_xlat_nl_cmd_get_mapping
,
39 .start
= ila_xlat_nl_dump_start
,
40 .dumpit
= ila_xlat_nl_dump
,
41 .done
= ila_xlat_nl_dump_done
,
45 unsigned int ila_net_id
;
47 struct genl_family ila_nl_family __ro_after_init
= {
49 .name
= ILA_GENL_NAME
,
50 .version
= ILA_GENL_VERSION
,
51 .maxattr
= ILA_ATTR_MAX
,
52 .policy
= ila_nl_policy
,
55 .module
= THIS_MODULE
,
57 .n_ops
= ARRAY_SIZE(ila_nl_ops
),
60 static __net_init
int ila_init_net(struct net
*net
)
64 err
= ila_xlat_init_net(net
);
66 goto ila_xlat_init_fail
;
74 static __net_exit
void ila_exit_net(struct net
*net
)
76 ila_xlat_exit_net(net
);
79 static struct pernet_operations ila_net_ops
= {
83 .size
= sizeof(struct ila_net
),
86 static int __init
ila_init(void)
90 ret
= register_pernet_device(&ila_net_ops
);
92 goto register_device_fail
;
94 ret
= genl_register_family(&ila_nl_family
);
96 goto register_family_fail
;
105 genl_unregister_family(&ila_nl_family
);
106 register_family_fail
:
107 unregister_pernet_device(&ila_net_ops
);
108 register_device_fail
:
112 static void __exit
ila_fini(void)
115 genl_unregister_family(&ila_nl_family
);
116 unregister_pernet_device(&ila_net_ops
);
119 module_init(ila_init
);
120 module_exit(ila_fini
);
121 MODULE_AUTHOR("Tom Herbert <tom@herbertland.com>");
122 MODULE_LICENSE("GPL");
123 MODULE_DESCRIPTION("IPv6: Identifier Locator Addressing (ILA)");