pnetlink 0.0.3

Netlink library in pure rust
use packet::netlink::{MutableNetlinkPacket,NetlinkPacket};
use packet::netlink::NetlinkMsgFlags;
use packet::netlink::{NetlinkBufIterator,NetlinkReader,NetlinkRequestBuilder};
use ::socket::{NetlinkSocket,NetlinkProtocol};
use packet::netlink::NetlinkConnection;
use pnet::packet::MutablePacket;
use pnet::packet::Packet;
use pnet::packet::PacketSize;
use libc;
use std::io::{Read,Write};

include!(concat!(env!("OUT_DIR"), "/audit/audit.rs"));

pub trait Audit where Self: Read + Write {
    fn audit_enable<'a>(&'a mut self) -> ::std::io::Result<()>;
}

impl Audit for NetlinkConnection {
    fn audit_enable<'a>(&'a mut self) -> ::std::io::Result<()> {
        let mut buf = vec![0; MutableAuditStatusPacket::minimum_packet_size()];
        let req = NetlinkRequestBuilder::new(1001, NetlinkMsgFlags::NLM_F_REQUEST | NetlinkMsgFlags::NLM_F_ACK)
            .append({
                let mut status = MutableAuditStatusPacket::new(&mut buf).unwrap();
                status.set_mask(1);
                status.set_enabled(1);
                status
            }).build();
        try!(self.write(req.packet()));
        let reader = NetlinkReader::new(self);
        reader.read_to_end()
    }
}