nell 0.3.0

Linux netlink interface
Documentation
// Copyright (C) 2018 - Will Glozer. All rights reserved.

use std::os::raw::{c_int, c_uchar, c_uint, c_ushort};

pub const RTM_NEWLINK:             u16 = 16;
pub const RTM_DELLINK:             u16 = 17;
pub const RTM_GETLINK:             u16 = 18;
pub const RTM_SETLINK:             u16 = 19;
pub const RTM_NEWADDR:             u16 = 20;
pub const RTM_DELADDR:             u16 = 21;
pub const RTM_GETADDR:             u16 = 22;
pub const RTM_NEWROUTE:            u16 = 24;
pub const RTM_DELROUTE:            u16 = 25;
pub const RTM_GETROUTE:            u16 = 26;
pub const RTM_NEWNEIGH:            u16 = 28;
pub const RTM_DELNEIGH:            u16 = 29;
pub const RTM_GETNEIGH:            u16 = 30;
pub const RTM_NEWRULE:             u16 = 32;
pub const RTM_DELRULE:             u16 = 33;
pub const RTM_GETRULE:             u16 = 34;
pub const RTM_NEWQDISC:            u16 = 36;
pub const RTM_DELQDISC:            u16 = 37;
pub const RTM_GETQDISC:            u16 = 38;
pub const RTM_NEWTCLASS:           u16 = 40;
pub const RTM_DELTCLASS:           u16 = 41;
pub const RTM_GETTCLASS:           u16 = 42;
pub const RTM_NEWTFILTER:          u16 = 44;
pub const RTM_DELTFILTER:          u16 = 45;
pub const RTM_GETTFILTER:          u16 = 46;
pub const RTM_NEWACTION:           u16 = 48;
pub const RTM_DELACTION:           u16 = 49;
pub const RTM_GETACTION:           u16 = 50;
pub const RTM_NEWPREFIX:           u16 = 52;
pub const RTM_GETMULTICAST:        u16 = 58;
pub const RTM_GETANYCAST:          u16 = 62;
pub const RTM_NEWNEIGHTBL:         u16 = 64;
pub const RTM_GETNEIGHTBL:         u16 = 66;
pub const RTM_SETNEIGHTBL:         u16 = 67;
pub const RTM_NEWNDUSEROPT:        u16 = 68;
pub const RTM_NEWADDRLABEL:        u16 = 72;
pub const RTM_DELADDRLABEL:        u16 = 73;
pub const RTM_GETADDRLABEL:        u16 = 74;
pub const RTM_GETDCB:              u16 = 78;
pub const RTM_SETDCB:              u16 = 79;
pub const RTM_NEWNETCONF:          u16 = 80;
pub const RTM_DELNETCONF:          u16 = 81;
pub const RTM_GETNETCONF:          u16 = 82;
pub const RTM_NEWMDB:              u16 = 84;
pub const RTM_DELMDB:              u16 = 85;
pub const RTM_GETMDB:              u16 = 86;
pub const RTM_NEWNSID:             u16 = 88;
pub const RTM_DELNSID:             u16 = 89;
pub const RTM_GETNSID:             u16 = 90;
pub const RTM_NEWSTATS:            u16 = 92;
pub const RTM_GETSTATS:            u16 = 94;
pub const RTM_NEWCACHEREPORT:      u16 = 96;

pub const RTMGRP_LINK:             u32 =  1;
pub const RTMGRP_NOTIFY:           u32 =  2;
pub const RTMGRP_NEIGH:            u32 =  4;
pub const RTMGRP_TC:               u32 =  8;

pub const RTMGRP_IPV4_IFADDR:      u32 =  0x10;
pub const RTMGRP_IPV4_MROUTE:      u32 =  0x20;
pub const RTMGRP_IPV4_ROUTE:       u32 =  0x40;
pub const RTMGRP_IPV4_RULE:        u32 =  0x80;
pub const RTMGRP_IPV6_IFADDR:      u32 = 0x100;
pub const RTMGRP_IPV6_MROUTE:      u32 = 0x200;
pub const RTMGRP_IPV6_ROUTE:       u32 = 0x400;
pub const RTMGRP_IPV6_IFINFO:      u32 = 0x800;

pub const RTNLGRP_LINK:            c_int = 1;
pub const RTNLGRP_NOTIFY:          c_int = 2;
pub const RTNLGRP_NEIGH:           c_int = 3;
pub const RTNLGRP_TC:              c_int = 4;
pub const RTNLGRP_IPV4_IFADDR:     c_int = 5;
pub const RTNLGRP_IPV4_MROUTE:     c_int = 6;
pub const RTNLGRP_IPV4_ROUTE:      c_int = 7;
pub const RTNLGRP_IPV4_RULE:       c_int = 8;
pub const RTNLGRP_IPV6_IFADDR:     c_int = 9;
pub const RTNLGRP_IPV6_MROUTE:     c_int = 10;
pub const RTNLGRP_IPV6_ROUTE:      c_int = 11;
pub const RTNLGRP_IPV6_IFINFO:     c_int = 12;
pub const RTNLGRP_DECNET_IFADDR:   c_int = 13;
pub const RTNLGRP_NOP2:            c_int = 14;
pub const RTNLGRP_DECNET_ROUTE:    c_int = 15;
pub const RTNLGRP_DECNET_RULE:     c_int = 16;
pub const RTNLGRP_NOP4:            c_int = 17;
pub const RTNLGRP_IPV6_PREFIX:     c_int = 18;
pub const RTNLGRP_IPV6_RULE:       c_int = 19;
pub const RTNLGRP_ND_USEROPT:      c_int = 20;
pub const RTNLGRP_PHONET_IFADDR:   c_int = 21;
pub const RTNLGRP_PHONET_ROUTE:    c_int = 22;
pub const RTNLGRP_DCB:             c_int = 23;
pub const RTNLGRP_IPV4_NETCONF:    c_int = 24;
pub const RTNLGRP_IPV6_NETCONF:    c_int = 25;
pub const RTNLGRP_MDB:             c_int = 26;
pub const RTNLGRP_MPLS_ROUTE:      c_int = 27;
pub const RTNLGRP_NSID:            c_int = 28;

pub const RTA_UNSPEC:              u16 = 0;
pub const RTA_DST:                 u16 = 1;
pub const RTA_SRC:                 u16 = 2;
pub const RTA_IIF:                 u16 = 3;
pub const RTA_OIF:                 u16 = 4;
pub const RTA_GATEWAY:             u16 = 5;
pub const RTA_PRIORITY:            u16 = 6;
pub const RTA_PREFSRC:             u16 = 7;
pub const RTA_METRICS:             u16 = 8;
pub const RTA_MULTIPATH:           u16 = 9;
pub const RTA_FLOW:                u16 = 10;
pub const RTA_CACHEINFO:           u16 = 11;
pub const RTA_TABLE:               u16 = 12;
pub const RTA_MARK:                u16 = 13;
pub const RTA_MFC_STATS:           u16 = 14;

#[repr(C)]
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct rtattr {
    pub rta_len:  c_ushort,
    pub rta_type: c_ushort,
}

#[repr(C)]
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct rtgenmsg {
    pub rtgen_family: c_uchar,
}

#[repr(C)]
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct rtmsg {
    pub rtm_family:   u8,
    pub rtm_dst_len:  u8,
    pub rtm_src_len:  u8,
    pub rtm_tos:      u8,
    pub rtm_table:    u8,
    pub rtm_protocol: u8,
    pub rtm_scope:    u8,
    pub rtm_type:     u8,
    pub rtm_flags:    c_uint,
}