1*4dc78e53SAndroid Build Coastguard Worker %module capi
2*4dc78e53SAndroid Build Coastguard Worker %{
3*4dc78e53SAndroid Build Coastguard Worker #include <netlink/genl/ctrl.h>
4*4dc78e53SAndroid Build Coastguard Worker #include <netlink/genl/family.h>
5*4dc78e53SAndroid Build Coastguard Worker #include <netlink/genl/genl.h>
6*4dc78e53SAndroid Build Coastguard Worker #include <netlink/genl/mngt.h>
7*4dc78e53SAndroid Build Coastguard Worker %}
8*4dc78e53SAndroid Build Coastguard Worker
9*4dc78e53SAndroid Build Coastguard Worker %include <stdint.i>
10*4dc78e53SAndroid Build Coastguard Worker %include <cstring.i>
11*4dc78e53SAndroid Build Coastguard Worker
12*4dc78e53SAndroid Build Coastguard Worker /* #include <netlink/genl/ctrl.h> */
13*4dc78e53SAndroid Build Coastguard Worker extern int genl_ctrl_alloc_cache(struct nl_sock *, struct nl_cache **o_cache);
14*4dc78e53SAndroid Build Coastguard Worker extern struct genl_family *genl_ctrl_search(struct nl_cache *, int);
15*4dc78e53SAndroid Build Coastguard Worker extern struct genl_family *genl_ctrl_search_by_name(struct nl_cache *,
16*4dc78e53SAndroid Build Coastguard Worker const char *);
17*4dc78e53SAndroid Build Coastguard Worker extern int genl_ctrl_resolve(struct nl_sock *, const char *);
18*4dc78e53SAndroid Build Coastguard Worker extern int genl_ctrl_resolve_grp(struct nl_sock *sk, const char *family,
19*4dc78e53SAndroid Build Coastguard Worker const char *grp);
20*4dc78e53SAndroid Build Coastguard Worker
21*4dc78e53SAndroid Build Coastguard Worker /* #include <netlink/genl/family.h> */
22*4dc78e53SAndroid Build Coastguard Worker extern struct genl_family *genl_family_alloc(void);
23*4dc78e53SAndroid Build Coastguard Worker extern void genl_family_put(struct genl_family *);
24*4dc78e53SAndroid Build Coastguard Worker
25*4dc78e53SAndroid Build Coastguard Worker extern unsigned int genl_family_get_id(struct genl_family *);
26*4dc78e53SAndroid Build Coastguard Worker extern void genl_family_set_id(struct genl_family *, unsigned int);
27*4dc78e53SAndroid Build Coastguard Worker extern char *genl_family_get_name(struct genl_family *);
28*4dc78e53SAndroid Build Coastguard Worker extern void genl_family_set_name(struct genl_family *, const char *name);
29*4dc78e53SAndroid Build Coastguard Worker extern uint8_t genl_family_get_version(struct genl_family *);
30*4dc78e53SAndroid Build Coastguard Worker extern void genl_family_set_version(struct genl_family *, uint8_t);
31*4dc78e53SAndroid Build Coastguard Worker extern uint32_t genl_family_get_hdrsize(struct genl_family *);
32*4dc78e53SAndroid Build Coastguard Worker extern void genl_family_set_hdrsize(struct genl_family *, uint32_t);
33*4dc78e53SAndroid Build Coastguard Worker extern uint32_t genl_family_get_maxattr(struct genl_family *);
34*4dc78e53SAndroid Build Coastguard Worker extern void genl_family_set_maxattr(struct genl_family *, uint32_t);
35*4dc78e53SAndroid Build Coastguard Worker
36*4dc78e53SAndroid Build Coastguard Worker extern int genl_family_add_op(struct genl_family *, int, int);
37*4dc78e53SAndroid Build Coastguard Worker extern int genl_family_add_grp(struct genl_family *, uint32_t , const char *);
38*4dc78e53SAndroid Build Coastguard Worker
39*4dc78e53SAndroid Build Coastguard Worker /* #include <linux/genetlink.h> */
40*4dc78e53SAndroid Build Coastguard Worker struct genlmsghdr {
41*4dc78e53SAndroid Build Coastguard Worker uint8_t cmd;
42*4dc78e53SAndroid Build Coastguard Worker uint8_t version;
43*4dc78e53SAndroid Build Coastguard Worker uint16_t reserved;
44*4dc78e53SAndroid Build Coastguard Worker };
45*4dc78e53SAndroid Build Coastguard Worker
46*4dc78e53SAndroid Build Coastguard Worker /* #include <netlink/genl/genl.h> */
47*4dc78e53SAndroid Build Coastguard Worker extern int genl_connect(struct nl_sock *);
48*4dc78e53SAndroid Build Coastguard Worker extern struct genlmsghdr *genlmsg_hdr(struct nlmsghdr *);
49*4dc78e53SAndroid Build Coastguard Worker
50*4dc78e53SAndroid Build Coastguard Worker extern void *genlmsg_put(struct nl_msg *, uint32_t, uint32_t,
51*4dc78e53SAndroid Build Coastguard Worker int, int, int, uint8_t, uint8_t);
52*4dc78e53SAndroid Build Coastguard Worker
53*4dc78e53SAndroid Build Coastguard Worker struct nlattr {
54*4dc78e53SAndroid Build Coastguard Worker };
55*4dc78e53SAndroid Build Coastguard Worker
56*4dc78e53SAndroid Build Coastguard Worker struct nla_policy {
57*4dc78e53SAndroid Build Coastguard Worker /** Type of attribute or NLA_UNSPEC */
58*4dc78e53SAndroid Build Coastguard Worker uint16_t type;
59*4dc78e53SAndroid Build Coastguard Worker
60*4dc78e53SAndroid Build Coastguard Worker /** Minimal length of payload required */
61*4dc78e53SAndroid Build Coastguard Worker uint16_t minlen;
62*4dc78e53SAndroid Build Coastguard Worker
63*4dc78e53SAndroid Build Coastguard Worker /** Maximal length of payload allowed */
64*4dc78e53SAndroid Build Coastguard Worker uint16_t maxlen;
65*4dc78e53SAndroid Build Coastguard Worker };
66*4dc78e53SAndroid Build Coastguard Worker
67*4dc78e53SAndroid Build Coastguard Worker %inline %{
py_genlmsg_parse(struct nlmsghdr * nlh,int uhl,int max,PyObject * p)68*4dc78e53SAndroid Build Coastguard Worker PyObject *py_genlmsg_parse(struct nlmsghdr *nlh, int uhl, int max,
69*4dc78e53SAndroid Build Coastguard Worker PyObject *p)
70*4dc78e53SAndroid Build Coastguard Worker {
71*4dc78e53SAndroid Build Coastguard Worker struct nlattr *tb_msg[max + 1];
72*4dc78e53SAndroid Build Coastguard Worker struct nla_policy *policy = NULL;
73*4dc78e53SAndroid Build Coastguard Worker void *pol;
74*4dc78e53SAndroid Build Coastguard Worker PyObject *attrs = Py_None;
75*4dc78e53SAndroid Build Coastguard Worker PyObject *k;
76*4dc78e53SAndroid Build Coastguard Worker PyObject *v;
77*4dc78e53SAndroid Build Coastguard Worker PyObject *resobj;
78*4dc78e53SAndroid Build Coastguard Worker int err;
79*4dc78e53SAndroid Build Coastguard Worker int i;
80*4dc78e53SAndroid Build Coastguard Worker
81*4dc78e53SAndroid Build Coastguard Worker if (p != Py_None) {
82*4dc78e53SAndroid Build Coastguard Worker PyObject *pobj;
83*4dc78e53SAndroid Build Coastguard Worker
84*4dc78e53SAndroid Build Coastguard Worker if (!PyList_Check(p)) {
85*4dc78e53SAndroid Build Coastguard Worker fprintf(stderr, "expected list object\n");
86*4dc78e53SAndroid Build Coastguard Worker err = -1;
87*4dc78e53SAndroid Build Coastguard Worker goto fail;
88*4dc78e53SAndroid Build Coastguard Worker }
89*4dc78e53SAndroid Build Coastguard Worker pobj = PyList_GetItem(p, 0);
90*4dc78e53SAndroid Build Coastguard Worker err = SWIG_ConvertPtr(pobj, &pol, SWIGTYPE_p_nla_policy, 0 | 0 );
91*4dc78e53SAndroid Build Coastguard Worker if (!SWIG_IsOK(err))
92*4dc78e53SAndroid Build Coastguard Worker goto fail;
93*4dc78e53SAndroid Build Coastguard Worker policy = pol;
94*4dc78e53SAndroid Build Coastguard Worker }
95*4dc78e53SAndroid Build Coastguard Worker err = genlmsg_parse(nlh, uhl, tb_msg, max, policy);
96*4dc78e53SAndroid Build Coastguard Worker if (err < 0) {
97*4dc78e53SAndroid Build Coastguard Worker fprintf(stderr, "Failed to parse response message\n");
98*4dc78e53SAndroid Build Coastguard Worker } else {
99*4dc78e53SAndroid Build Coastguard Worker attrs = PyDict_New();
100*4dc78e53SAndroid Build Coastguard Worker for (i = 0; i <= max; i++)
101*4dc78e53SAndroid Build Coastguard Worker if (tb_msg[i]) {
102*4dc78e53SAndroid Build Coastguard Worker k = PyInt_FromLong((long)i);
103*4dc78e53SAndroid Build Coastguard Worker v = SWIG_NewPointerObj(SWIG_as_voidptr(tb_msg[i]), SWIGTYPE_p_nlattr, 0 | 0 );
104*4dc78e53SAndroid Build Coastguard Worker PyDict_SetItem(attrs, k, v);
105*4dc78e53SAndroid Build Coastguard Worker }
106*4dc78e53SAndroid Build Coastguard Worker }
107*4dc78e53SAndroid Build Coastguard Worker fail:
108*4dc78e53SAndroid Build Coastguard Worker if (attrs == Py_None)
109*4dc78e53SAndroid Build Coastguard Worker Py_INCREF(Py_None);
110*4dc78e53SAndroid Build Coastguard Worker resobj = Py_BuildValue("(iO)", err, attrs);
111*4dc78e53SAndroid Build Coastguard Worker return resobj;
112*4dc78e53SAndroid Build Coastguard Worker }
113*4dc78e53SAndroid Build Coastguard Worker
114*4dc78e53SAndroid Build Coastguard Worker %}
115*4dc78e53SAndroid Build Coastguard Worker /* #include <netlink/genl/mngt.h> */
116*4dc78e53SAndroid Build Coastguard Worker /* nothing yet */
117