-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Library to comminicate with Linux kernel via Netlink
@package netlink
@version 1.1.1.0


module System.Linux.Netlink.Helpers

-- | Indent a String by 2 " "s for output
indent :: String -> String

-- | <a>Put</a> <a>Word8</a>
p8 :: Word8 -> Put

-- | <a>Put</a> <a>Word16</a>
p16 :: Word16 -> Put

-- | <a>Put</a> <a>Word32</a>
p32 :: Word32 -> Put

-- | <a>Put</a> <a>Word64</a>
p64 :: Word64 -> Put

-- | <a>Get</a> <a>Word8</a>
g8 :: Get Word8

-- | <a>Get</a> <a>Word16</a>
g16 :: Get Word16

-- | <a>Get</a> <a>Word32</a>
g32 :: Get Word32

-- | <a>Get</a> <a>Word64</a>
g64 :: Get Word64


-- | This is the base module for the netlink package. It contains functions
--   and datatype used by every netlink module. All definitions are
--   (supposed to be) generic enough to be used by implementations of more
--   specific netlink interfaces.
module System.Linux.Netlink

-- | Data type for the netlink header
data Header
Header :: MessageType -> Word16 -> Word32 -> Word32 -> Header

-- | The message type
[messageType] :: Header -> MessageType

-- | The message flags
[messageFlags] :: Header -> Word16

-- | The sequence message number
[messageSeqNum] :: Header -> Word32

-- | The pid of the sending process (0 is from kernel for receiving or "let
--   the kernel set it" for sending)
[messagePID] :: Header -> Word32

-- | Type used for netlink attributes
type Attributes = Map Int ByteString

-- | The generic netlink message type
data Packet a
Packet :: Header -> a -> Attributes -> Packet a

-- | The netlink message header
[packetHeader] :: Packet a -> Header

-- | The datatype for additional static data for the interface
[packetCustom] :: Packet a -> a

-- | The netlink attributes
[packetAttributes] :: Packet a -> Attributes
ErrorMsg :: Header -> CInt -> Packet a -> Packet a

-- | The netlink message header
[packetHeader] :: Packet a -> Header

-- | The error ID for this error message
[packetError] :: Packet a -> CInt

-- | The offending message
[errorPacket] :: Packet a -> Packet a
DoneMsg :: Header -> Packet a

-- | The netlink message header
[packetHeader] :: Packet a -> Header

-- | Typeclase used by the system. Basically <tt>Storable</tt> for
--   <a>Get</a> and <a>Put</a>
--   
--   getGet Returns a <a>Get</a> function for the convertable.
--   
--   The MessageType is passed so that the function can parse different
--   data structures based on the message type.
class Convertable a
getGet :: Convertable a => MessageType -> Get a
getPut :: Convertable a => a -> Put

-- | Datatype to be used when there is no additional static header
data NoData
NoData :: NoData

-- | Typesafe wrapper around a <a>CInt</a> (fd)
data NetlinkSocket

-- | Read packets from the buffer
getPacket :: ByteString -> Get a -> Either String [a]

-- | <a>Get</a> Attributes
getAttributes :: Get Attributes

-- | <a>Get</a> the netlink <a>Header</a>
getHeader :: Get (Int, Header)

-- | <a>Put</a> the netlink <a>Header</a>
putHeader :: Int -> Header -> Put

-- | <a>Put</a> a <a>Map</a> of <a>Attributes</a>
putAttributes :: Attributes -> Put

-- | <a>Put</a> a <a>Packet</a> so it can e sent
putPacket :: (Convertable a, Eq a, Show a) => Packet a -> [ByteString]

-- | Read all <a>Packet</a>s from a buffer
--   
--   The packets may have additional static data defined by the protocol.
getPackets :: (Convertable a, Eq a, Show a) => ByteString -> Either String [Packet a]

-- | Open and return a <a>NetlinkSocket</a>, for legacy reasons this opens
--   a route socket
makeSocket :: IO NetlinkSocket

-- | Open a <a>NetlinkSocket</a>. This is the generic function
makeSocketGeneric :: Int -> IO NetlinkSocket

-- | Get the raw <a>Fd</a> used for netlink communcation (this can be
--   plugged into eventing)
getNetlinkFd :: NetlinkSocket -> Fd

-- | Close a <a>NetlinkSocket</a> when it is no longer used
closeSocket :: NetlinkSocket -> IO ()

-- | Join a netlink multicast group
joinMulticastGroup :: NetlinkSocket -> Word32 -> IO ()

-- | Leave a netlink multicast group
leaveMulticastGroup :: NetlinkSocket -> Word32 -> IO ()

-- | Query data over netlink.
--   
--   This sends a <a>Packet</a> over netlink and returns the answer. This
--   blocks in a safe foregin function until the other side replies.
query :: (Convertable a, Eq a, Show a) => NetlinkSocket -> Packet a -> IO [Packet a]

-- | The same as <a>query</a> but requires the answer to be a single
--   message
queryOne :: (Convertable a, Eq a, Show a) => NetlinkSocket -> Packet a -> IO (Packet a)

-- | Calls recvmsg once and returns all received messages
--   
--   This should only be used outside of the package when reading multicast
--   messages.
--   
--   The prototype of this function is unintuitive, but this cannot be
--   avoided without buffering in userspace with the netlink api.
recvOne :: (Convertable a, Eq a, Show a) => NetlinkSocket -> IO [Packet a]

-- | Convert generic NLAttrs into a string (# and hexdump)
showNLAttrs :: Attributes -> String

-- | Helper function to convert attributes into a string
showAttrs :: (Int -> String) -> Attributes -> String

-- | Helper function to generically show a single attribute
showAttr :: (Int -> String) -> (Int, ByteString) -> String

-- | Helperfunction for show instance of <a>Packet</a> and further
--   specializations
showPacket :: Show a => Packet a -> String
instance System.Linux.Netlink.Convertable System.Linux.Netlink.NoData
instance GHC.Classes.Eq System.Linux.Netlink.Header
instance GHC.Classes.Eq System.Linux.Netlink.NoData
instance GHC.Classes.Eq a => GHC.Classes.Eq (System.Linux.Netlink.Packet a)
instance GHC.Internal.Show.Show System.Linux.Netlink.Header
instance GHC.Internal.Show.Show System.Linux.Netlink.NoData
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (System.Linux.Netlink.Packet a)


-- | This module providis utility functions for NL80211 subsystem. In
--   particular the IEEE80211 WifiEI part of NL80211.
module System.Linux.Netlink.GeNetlink.NL80211.WifiEI

-- | Prettyprint the WifiEid map
showWifiEid :: ByteString -> String

-- | <a>Get</a> the EID Attributes from a buffer
getWifiEIDs :: Get Attributes


-- | This module providis utility functions for NL80211 subsystem. In
--   particular the NL80211_ATTR_STA_INFO part of NL80211. For more
--   information see <i>usr</i>include<i>linux</i>nl80211.h
module System.Linux.Netlink.GeNetlink.NL80211.StaInfo

-- | Structure for wifi station information.
data StaInfo
StaInfo :: Maybe Word32 -> Maybe Word32 -> Maybe Word64 -> Maybe Word64 -> Maybe Word16 -> Maybe Word16 -> Maybe Word8 -> Maybe Word64 -> Maybe Word8 -> Maybe Word8 -> Maybe Signal -> Maybe Signal -> Maybe StaRate -> Maybe StaRate -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Attributes -> Maybe ByteString -> Maybe Word64 -> Maybe Word64 -> Maybe Word64 -> Maybe Word8 -> Maybe Attributes -> Maybe Attributes -> Attributes -> StaInfo

-- | For how long we are connected.
[staConTime] :: StaInfo -> Maybe Word32

-- | Time since the last time we saw the station send something.
[staInaTime] :: StaInfo -> Maybe Word32

-- | Bytes received. This will be transmitted twice if 64bit in kernel.
--   Will be parsed into this either way.
[staRXBytes] :: StaInfo -> Maybe Word64

-- | Bytes received. This will be transmitted twice if 64bit in kernel.
--   Will be parsed into this either way.
[staTXBytes] :: StaInfo -> Maybe Word64
[staLLID] :: StaInfo -> Maybe Word16
[staPLID] :: StaInfo -> Maybe Word16
[staPLState] :: StaInfo -> Maybe Word8
[staRXDur] :: StaInfo -> Maybe Word64
[staSignalMBM] :: StaInfo -> Maybe Word8
[staSignalMBMA] :: StaInfo -> Maybe Word8
[staSignal] :: StaInfo -> Maybe Signal
[staSignalAvg] :: StaInfo -> Maybe Signal
[staTXRate] :: StaInfo -> Maybe StaRate
[staRXRate] :: StaInfo -> Maybe StaRate
[staRXPackets] :: StaInfo -> Maybe Word32
[staTXPackets] :: StaInfo -> Maybe Word32
[staTXRetries] :: StaInfo -> Maybe Word32
[staTXFailed] :: StaInfo -> Maybe Word32
[staExpectTP] :: StaInfo -> Maybe Word32
[staBeaconLoss] :: StaInfo -> Maybe Word32

-- | PM: STA link specific Power Mode
[staLocalPM] :: StaInfo -> Maybe Word32
[staPeerPM] :: StaInfo -> Maybe Word32
[staNonPeerPM] :: StaInfo -> Maybe Word32

-- | This field is a bit weird in the code :(
[staBssAttrs] :: StaInfo -> Maybe Attributes
[staInfoFlags] :: StaInfo -> Maybe ByteString
[staTOffset] :: StaInfo -> Maybe Word64
[staRXDropMisc] :: StaInfo -> Maybe Word64
[staBeaconRX] :: StaInfo -> Maybe Word64
[staBSignalAvg] :: StaInfo -> Maybe Word8
[staTidStats] :: StaInfo -> Maybe Attributes
[staAssocIES] :: StaInfo -> Maybe Attributes

-- | Pointer to the Attributes map used to build this struct. This is
--   purely |for forward compat, please file a feature report if you have
--   to use this.
[staSelf] :: StaInfo -> Attributes

-- | Type for the signal width reported by the kernel.
--   
--   The nl80211 header defines more than this, but nl80211.c only uses the
--   widths defined here.
data SignalWidth
Width5MHz :: SignalWidth
Width10MHz :: SignalWidth
Width20MHz :: SignalWidth
Width40MHz :: SignalWidth
Width80MHz :: SignalWidth
Width160MHz :: SignalWidth

-- | Type for "chain signal"
newtype Signal
Signal :: [Word8] -> Signal

-- | Type for the rate attributes in StaInfo
data StaRate
StaRate :: Maybe Word32 -> SignalWidth -> Maybe Word8 -> Bool -> Maybe Word8 -> Maybe Word8 -> Attributes -> StaRate

-- | This will be reported as Word16/Word32 from the kernel. We read it
--   into one value. |If this is Nothing, mcs is &gt;= 32 looking at the
--   code, so it *should* |never be Nothing.
[rateBitrate] :: StaRate -> Maybe Word32
[rateWidthFlag] :: StaRate -> SignalWidth
[rateMCS] :: StaRate -> Maybe Word8
[rateShortGI] :: StaRate -> Bool
[rateVHTMCS] :: StaRate -> Maybe Word8
[rateVHTNSS] :: StaRate -> Maybe Word8
[rateSelf] :: StaRate -> Attributes

-- | Get a Signal from the nested attributes.
signalFromAttributes :: Attributes -> Signal

-- | Get the StaRate from a parsed nested Attribute
staRateFromAttributes :: Attributes -> StaRate

-- | Parse the nested Netlink Attributes into an StaInfo
staInfoFromAttributes :: Attributes -> StaInfo

-- | <a>Get</a> an StaInfo from a Bytestring
getStaInfo :: Get StaInfo

-- | extract the StaInfo from a Packet. Use with caution.
staInfoFromPacket :: Packet a -> Maybe StaInfo
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.StaInfo.Signal
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.StaInfo.SignalWidth
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaInfo
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaRate
instance GHC.Internal.Read.Read System.Linux.Netlink.GeNetlink.NL80211.StaInfo.Signal
instance GHC.Internal.Read.Read System.Linux.Netlink.GeNetlink.NL80211.StaInfo.SignalWidth
instance GHC.Internal.Read.Read System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaInfo
instance GHC.Internal.Read.Read System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaRate
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.NL80211.StaInfo.Signal
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.NL80211.StaInfo.SignalWidth
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaInfo
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaRate


-- | GeNetlink is used as multiplexer since netlink only supports 32
--   families.
--   
--   This module provides the basic datatypes used by genetlink.
module System.Linux.Netlink.GeNetlink

-- | The static data used by genetlink
--   
--   For more information about genetlink look into
--   <i>usr</i>include<i>linux</i>genetlink.h
data GenlHeader
GenlHeader :: Word8 -> Word8 -> GenlHeader
[genlCmd] :: GenlHeader -> Word8
[genlVersion] :: GenlHeader -> Word8

-- | A wrapper around <a>GenlHeader</a>
--   
--   This may be used by actual implementations to handle additional static
--   data placed after the genl header by the protocol they implement.
data GenlData a
GenlData :: GenlHeader -> a -> GenlData a
[genlDataHeader] :: GenlData a -> GenlHeader
[genlDataData] :: GenlData a -> a

-- | Type declaration for genetlink packets
type GenlPacket a = Packet GenlData a

-- | <a>Get</a> function for <a>GenlHeader</a>
getGenlHeader :: Get GenlHeader

-- | <a>Put</a> function for <a>GenlHeader</a>
putGeHeader :: GenlHeader -> Put

-- | <a>makeSocketGeneric</a> preapplied for genetlink family
makeSocket :: IO NetlinkSocket
instance System.Linux.Netlink.Convertable a => System.Linux.Netlink.Convertable (System.Linux.Netlink.GeNetlink.GenlData a)
instance System.Linux.Netlink.Convertable System.Linux.Netlink.GeNetlink.GenlHeader
instance GHC.Classes.Eq a => GHC.Classes.Eq (System.Linux.Netlink.GeNetlink.GenlData a)
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.GenlHeader
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (System.Linux.Netlink.GeNetlink.GenlData a)
instance GHC.Internal.Show.Show (System.Linux.Netlink.GeNetlink.GenlData System.Linux.Netlink.NoData)
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.GenlHeader
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (System.Linux.Netlink.GeNetlink.GenlPacket a)


-- | This module provides utility functions and datatypes for the genetlink
--   control protocol. This has to be used by implementations of netlink
--   families based on genetlink to lookup their current id, since that is
--   determined at runtime.
module System.Linux.Netlink.GeNetlink.Control

-- | Attributes defined by the control family
data CtrlAttribute
CTRL_ATTR_UNSPEC :: ByteString -> CtrlAttribute
CTRL_ATTR_FAMILY_ID :: Word16 -> CtrlAttribute
CTRL_ATTR_FAMILY_NAME :: String -> CtrlAttribute
CTRL_ATTR_VERSION :: Word32 -> CtrlAttribute
CTRL_ATTR_HDRSIZE :: Word32 -> CtrlAttribute
CTRL_ATTR_MAXATTR :: Word32 -> CtrlAttribute
CTRL_ATTR_OPS :: [CtrlAttrOpData] -> CtrlAttribute
CTRL_ATTR_MCAST_GROUPS :: [CtrlAttrMcastGroup] -> CtrlAttribute
CTRL_ATTR_UNKNOWN :: Int -> ByteString -> CtrlAttribute

-- | Datatype for multicast groups as returned by the control protocol
data CtrlAttrMcastGroup
CAMG :: String -> Word32 -> CtrlAttrMcastGroup
[grpName] :: CtrlAttrMcastGroup -> String
[grpId] :: CtrlAttrMcastGroup -> Word32

-- | Typesafe control packet
data CtrlPacket
CtrlPacket :: Header -> GenlHeader -> [CtrlAttribute] -> CtrlPacket
[ctrlHeader] :: CtrlPacket -> Header
[ctrlGeHeader] :: CtrlPacket -> GenlHeader
[ctrlAttributes] :: CtrlPacket -> [CtrlAttribute]

-- | typedef for control messages
type CTRLPacket = GenlPacket NoData

-- | Convert "normal" <a>Packet</a>s into typesafe <a>CtrlPacket</a>s
ctrlPacketFromGenl :: CTRLPacket -> Maybe CtrlPacket

-- | Datatype for AttrOpData as returned by the control protocol
data CtrlAttrOpData
CAO :: Word32 -> Word32 -> CtrlAttrOpData
[opId] :: CtrlAttrOpData -> Word32
[opFlags] :: CtrlAttrOpData -> Word32

-- | Convert the typesafe <tt>CtrPacket</tt> into a <a>CTRLPacket</a> so it
--   can be sent
ctrlPackettoGenl :: CtrlPacket -> CTRLPacket

-- | Get the id for a netlink family by name
getFamilyId :: NetlinkSocket -> String -> IO Word16

-- | A safe version of <a>getFamilyId</a>
getFamilyIdS :: NetlinkSocket -> String -> IO (Maybe Word16)

-- | get the id and multicast groups of a netlink family by name
getFamilyWithMulticasts :: NetlinkSocket -> String -> IO (Word16, [CtrlAttrMcastGroup])

-- | A safe version of <a>getFamilyWithMulticasts</a>
getFamilyWithMulticastsS :: NetlinkSocket -> String -> IO (Maybe (Word16, [CtrlAttrMcastGroup]))

-- | get the mutlicast groups of a netlink family by id
getMulticastGroups :: NetlinkSocket -> Word16 -> IO [CtrlAttrMcastGroup]

-- | Get id of multicast group by name
getMulticast :: String -> [CtrlAttrMcastGroup] -> Maybe Word32

-- | Get the <a>CtrlPacket</a> describing a single family
getFamilie :: NetlinkSocket -> String -> IO (Maybe CtrlPacket)

-- | Get <a>CtrlPacket</a>s for every currently registered GeNetlink family
getFamilies :: NetlinkSocket -> IO [CtrlPacket]
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.Control.CtrlAttrMcastGroup
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.Control.CtrlAttrOpData
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.Control.CtrlAttribute
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.Control.CtrlPacket
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.Control.CtrlAttrMcastGroup
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.Control.CtrlAttrOpData
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.Control.CtrlAttribute
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.Control.CtrlPacket


-- | This module providis utility functions for NL80211 subsystem. For more
--   information see <i>usr</i>include<i>linux</i>nl80211.h
module System.Linux.Netlink.GeNetlink.NL80211

-- | Wrapper for <a>NetlinkSocket</a> we also need the family id for
--   messages we construct
data NL80211Socket

-- | typedef for messages send by this mdoule
type NL80211Packet = GenlPacket NoData80211

-- | Create a <a>NL80211Socket</a> this opens a genetlink socket and gets
--   the family id
makeNL80211Socket :: IO NL80211Socket

-- | Join a nl80211 multicast group by name
joinMulticastByName :: NL80211Socket -> String -> IO ()

-- | queryOne for NL80211 (see <a>queryOne</a>)
queryOne :: NL80211Socket -> Word8 -> Bool -> Attributes -> IO NL80211Packet

-- | query for NL80211 (see <a>query</a>)
query :: NL80211Socket -> Word8 -> Bool -> Attributes -> IO [NL80211Packet]

-- | Get the list of interfaces currently managed by NL80211
getInterfaceList :: NL80211Socket -> IO [(String, Word32)]

-- | get scan results
--   
--   In testing this could be a big chunk of data when a scan just happened
--   or be pretty much only the currently connected wifi.
--   
--   For more information about how this is structured look into kernel
--   source or just try it out.
getScanResults :: NL80211Socket -> Word32 -> IO [NL80211Packet]

-- | Get the information about the currently connected wifi(s).
--   
--   This would technically work for multiple connected wifis, but since we
--   only get information about one interface this should only ever be
--   emtpy on a singleton list.
--   
--   For more information about how this is structured look into kernel
--   soruce or just try it out.
getConnectedWifi :: NL80211Socket -> Word32 -> IO [NL80211Packet]

-- | Get the EID attributes from a <a>NL80211Packet</a> (for example from
--   <a>getConnectedWifi</a>
getWifiAttributes :: NL80211Packet -> Maybe Attributes

-- | NL80211 version of <a>recvOne</a>
getPacket :: NL80211Socket -> IO [NL80211Packet]

-- | Get the raw fd from a <a>NL80211Socket</a>. This can be used for
--   eventing
getFd :: NL80211Socket -> Fd

-- | Get the names of all multicast groups this nl80211 implementation
--   provides
getMulticastGroups :: NL80211Socket -> IO [String]
instance System.Linux.Netlink.Convertable System.Linux.Netlink.GeNetlink.NL80211.NoData80211
instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.NoData80211
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.NL80211.NoData80211
instance GHC.Internal.Show.Show System.Linux.Netlink.GeNetlink.NL80211.NL80211Packet


module System.Linux.Netlink.Route.LinkStat

-- | Data Structure for rtnl link stats
data LinkStat

-- | Get a <a>LinkStat</a> object from a 64bit C struct
getLinkStat64 :: Get LinkStat

-- | Put a <a>LinkStat</a> object into a 64bit C struct
putLinkStat64 :: LinkStat -> Put

-- | Get a <a>LinkStat</a> object from a 32bit C struct
getLinkStat32 :: Get LinkStat

-- | Put a <a>LinkStat</a> object into a 32bit C struct
putLinkStat32 :: LinkStat -> Put
instance GHC.Classes.Eq System.Linux.Netlink.Route.LinkStat.LinkStat
instance GHC.Internal.Show.Show System.Linux.Netlink.Route.LinkStat.LinkStat


-- | This module provides wrappers for functionality provided by the
--   netlink route family
module System.Linux.Netlink.Route

-- | The generic netlink message type
data Packet a

-- | Typedef for route messages
type RoutePacket = Packet Message

-- | <a>Get</a> a route message or an error
getRoutePackets :: ByteString -> Either String [RoutePacket]

-- | The static data for route messages
data Message
NLinkMsg :: LinkType -> Word32 -> Word32 -> Message
[interfaceType] :: Message -> LinkType
[interfaceIndex] :: Message -> Word32

-- | System.Linux.Netlink.Constants.fIFF_* flags
[interfaceFlags] :: Message -> Word32
NAddrMsg :: AddressFamily -> Word8 -> Word8 -> Word8 -> Word32 -> Message
[addrFamily] :: Message -> AddressFamily
[addrMaskLength] :: Message -> Word8
[addrFlags] :: Message -> Word8
[addrScope] :: Message -> Word8
[addrInterfaceIndex] :: Message -> Word32
NNeighMsg :: Word8 -> Int32 -> Word16 -> Word8 -> Word8 -> Message

-- | One of System.Linux.Netlink.Constants.eAF_* values
[neighFamily] :: Message -> Word8
[neighIfindex] :: Message -> Int32

-- | System.Linux.Netlink.Constants.fNUD_* flags
[neighState] :: Message -> Word16
[neighFlags] :: Message -> Word8
[neighType] :: Message -> Word8

-- | get L2 address from netlink attributes
getLinkAddress :: AttributeReader LinkAddress

-- | get L2 broadcast address from netlink attributes
getLinkBroadcast :: AttributeReader LinkAddress

-- | get interface name from netlink attributes
getLinkName :: AttributeReader String

-- | get mtu from netlink attributes
getLinkMTU :: AttributeReader Word32

-- | I actually have no idea what QDisc is
getLinkQDisc :: AttributeReader String

-- | I should look this up
getLinkTXQLen :: AttributeReader Word32

-- | get interface address from netlink attributes of <a>NAddrMsg</a>
getIFAddr :: AttributeReader ByteString

-- | get L2 address from netlink attributes of <a>NNeighMsg</a>
getLLAddr :: AttributeReader LinkAddress

-- | get destination address from netlink attributes of <a>NNeighMsg</a>
getDstAddr :: AttributeReader ByteString

-- | set L2 address on netlink attributes
putLinkAddress :: AttributeWriter LinkAddress

-- | set L2 broadcast address on netlink attributes
putLinkBroadcast :: AttributeWriter LinkAddress

-- | set interface name on netlink attributes
putLinkName :: AttributeWriter String

-- | set mtu on netlink attributes
putLinkMTU :: AttributeWriter Word32

-- | I actually have no idea what QDisc is
putLinkQDisc :: AttributeWriter String

-- | I should look this up
putLinkTXQLen :: AttributeWriter Word32
instance System.Linux.Netlink.Convertable System.Linux.Netlink.Route.Message
instance GHC.Classes.Eq System.Linux.Netlink.Route.Message
instance GHC.Internal.Show.Show System.Linux.Netlink.Route.Message
instance GHC.Internal.Show.Show System.Linux.Netlink.Route.RoutePacket
