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