{-# LINE 1 "Network/Socket/Linux/Types.hsc" #-}
{-# LANGUAGE PatternSynonyms #-}
module Network.Socket.Linux.Types (
SockAddrLl
, sllPktType
, physicalAddress
, mkBindSockAddrLl
, mkSendSockAddrLl
, IfIndex
, PhysicalAddress
, PhysicalAddressBytes
, addressLength
, address
, mkPhysicalAddress
, macAddress
, ProtocolId(GeneralProtocolId, UnsupportedProtocolId
,ETH_P_LOOP,ETH_P_PUP,ETH_P_PUPAT,ETH_P_IP,ETH_P_X25,ETH_P_ARP
,ETH_P_BPQ,ETH_P_IEEEPUP,ETH_P_IEEEPUPAT,ETH_P_DEC,ETH_P_DNA_DL
,ETH_P_DNA_RC,ETH_P_DNA_RT,ETH_P_LAT,ETH_P_DIAG,ETH_P_CUST
,ETH_P_SCA,ETH_P_TEB,ETH_P_RARP,ETH_P_ATALK,ETH_P_AARP
,ETH_P_8021Q,ETH_P_IPX,ETH_P_IPV6,ETH_P_PAUSE,ETH_P_SLOW
,ETH_P_WCCP,ETH_P_PPP_DISC,ETH_P_PPP_SES,ETH_P_MPLS_UC
,ETH_P_MPLS_MC,ETH_P_ATMMPOA,ETH_P_ATMFATE,ETH_P_PAE,ETH_P_AOE
,ETH_P_TIPC,ETH_P_1588,ETH_P_FCOE,ETH_P_FIP,ETH_P_EDSA
,ETH_P_802_3,ETH_P_AX25,ETH_P_ALL,ETH_P_802_2,ETH_P_SNAP
,ETH_P_DDCMP,ETH_P_WAN_PPP,ETH_P_PPP_MP,ETH_P_LOCALTALK
,ETH_P_CAN,ETH_P_PPPTALK,ETH_P_TR_802_2,ETH_P_MOBITEX
,ETH_P_CONTROL,ETH_P_IRDA,ETH_P_ECONET,ETH_P_HDLC,ETH_P_ARCNET
,ETH_P_DSA,ETH_P_TRAILER,ETH_P_PHONET,ETH_P_IEEE802154)
, isSupportedProtocolId
, toProtocolNumber
, PacketType(GeneralPacketType, UnsupportedPacketType
,PACKET_HOST,PACKET_BROADCAST,PACKET_MULTICAST,PACKET_OTHERHOST
,PACKET_OUTGOING)
, isSupportedPacketType
) where
import Data.Word
import Foreign.Ptr
import Foreign.C.Types
import Foreign.Storable
import Network.Socket.ReadShow
import Network.Socket (Family, packFamily, unpackFamily, ProtocolNumber)
import Network.Socket.Address (SocketAddress, peekSocketAddress, pokeSocketAddress, sizeOfSocketAddress)
import Text.Read (readPrec)
foreign import ccall unsafe "ntohs" ntohs :: Word16 -> Word16
foreign import ccall unsafe "htons" htons :: Word16 -> Word16
foreign import ccall unsafe "string.h" memset :: Ptr a -> CInt -> CSize -> IO ()
newtype ProtocolId = ProtocolId { ProtocolId -> CUShort
packProtocolId :: CUShort } deriving (ProtocolId -> ProtocolId -> Bool
(ProtocolId -> ProtocolId -> Bool)
-> (ProtocolId -> ProtocolId -> Bool) -> Eq ProtocolId
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ProtocolId -> ProtocolId -> Bool
$c/= :: ProtocolId -> ProtocolId -> Bool
== :: ProtocolId -> ProtocolId -> Bool
$c== :: ProtocolId -> ProtocolId -> Bool
Eq, Eq ProtocolId
Eq ProtocolId =>
(ProtocolId -> ProtocolId -> Ordering)
-> (ProtocolId -> ProtocolId -> Bool)
-> (ProtocolId -> ProtocolId -> Bool)
-> (ProtocolId -> ProtocolId -> Bool)
-> (ProtocolId -> ProtocolId -> Bool)
-> (ProtocolId -> ProtocolId -> ProtocolId)
-> (ProtocolId -> ProtocolId -> ProtocolId)
-> Ord ProtocolId
ProtocolId -> ProtocolId -> Bool
ProtocolId -> ProtocolId -> Ordering
ProtocolId -> ProtocolId -> ProtocolId
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ProtocolId -> ProtocolId -> ProtocolId
$cmin :: ProtocolId -> ProtocolId -> ProtocolId
max :: ProtocolId -> ProtocolId -> ProtocolId
$cmax :: ProtocolId -> ProtocolId -> ProtocolId
>= :: ProtocolId -> ProtocolId -> Bool
$c>= :: ProtocolId -> ProtocolId -> Bool
> :: ProtocolId -> ProtocolId -> Bool
$c> :: ProtocolId -> ProtocolId -> Bool
<= :: ProtocolId -> ProtocolId -> Bool
$c<= :: ProtocolId -> ProtocolId -> Bool
< :: ProtocolId -> ProtocolId -> Bool
$c< :: ProtocolId -> ProtocolId -> Bool
compare :: ProtocolId -> ProtocolId -> Ordering
$ccompare :: ProtocolId -> ProtocolId -> Ordering
$cp1Ord :: Eq ProtocolId
Ord)
isSupportedProtocolId :: ProtocolId -> Bool
isSupportedProtocolId :: ProtocolId -> Bool
isSupportedProtocolId f :: ProtocolId
f = case ProtocolId
f of
UnsupportedProtocolId -> Bool
False
GeneralProtocolId _ -> Bool
True
pattern GeneralProtocolId :: CUShort -> ProtocolId
pattern $bGeneralProtocolId :: CUShort -> ProtocolId
$mGeneralProtocolId :: forall r. ProtocolId -> (CUShort -> r) -> (Void# -> r) -> r
GeneralProtocolId n = ProtocolId n
{-# LINE 82 "Network/Socket/Linux/Types.hsc" #-}
{-# COMPLETE GeneralProtocolId #-}
{-# LINE 84 "Network/Socket/Linux/Types.hsc" #-}
unpackProtocolId :: CUShort -> ProtocolId
unpackProtocolId :: CUShort -> ProtocolId
unpackProtocolId = CUShort -> ProtocolId
ProtocolId
{-# INLINE unpackProtocolId #-}
toProtocolNumber :: ProtocolId -> ProtocolNumber
toProtocolNumber :: ProtocolId -> ProtocolNumber
toProtocolNumber = Word16 -> ProtocolNumber
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word16 -> ProtocolNumber)
-> (ProtocolId -> Word16) -> ProtocolId -> ProtocolNumber
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word16 -> Word16
htons (Word16 -> Word16)
-> (ProtocolId -> Word16) -> ProtocolId -> Word16
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CUShort -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUShort -> Word16)
-> (ProtocolId -> CUShort) -> ProtocolId -> Word16
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProtocolId -> CUShort
packProtocolId
pattern UnsupportedProtocolId :: ProtocolId
pattern $bUnsupportedProtocolId :: ProtocolId
$mUnsupportedProtocolId :: forall r. ProtocolId -> (Void# -> r) -> (Void# -> r) -> r
UnsupportedProtocolId = ProtocolId (-1)
pattern ETH_P_LOOP :: ProtocolId
{-# LINE 103 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_LOOP = ProtocolId (96)
{-# LINE 104 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 107 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PUP :: ProtocolId
{-# LINE 111 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PUP = ProtocolId (512)
{-# LINE 112 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 115 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PUPAT :: ProtocolId
{-# LINE 119 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PUPAT = ProtocolId (513)
{-# LINE 120 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 123 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IP :: ProtocolId
{-# LINE 127 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IP = ProtocolId (2048)
{-# LINE 128 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 131 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_X25 :: ProtocolId
{-# LINE 135 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_X25 = ProtocolId (2053)
{-# LINE 136 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 139 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ARP :: ProtocolId
{-# LINE 143 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ARP = ProtocolId (2054)
{-# LINE 144 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 147 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_BPQ :: ProtocolId
{-# LINE 151 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_BPQ = ProtocolId (2303)
{-# LINE 152 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 155 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IEEEPUP :: ProtocolId
{-# LINE 159 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IEEEPUP = ProtocolId (2560)
{-# LINE 160 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 163 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IEEEPUPAT :: ProtocolId
{-# LINE 167 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IEEEPUPAT = ProtocolId (2561)
{-# LINE 168 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 171 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DEC :: ProtocolId
{-# LINE 175 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DEC = ProtocolId (24576)
{-# LINE 176 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 179 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DNA_DL :: ProtocolId
{-# LINE 183 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DNA_DL = ProtocolId (24577)
{-# LINE 184 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 187 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DNA_RC :: ProtocolId
{-# LINE 191 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DNA_RC = ProtocolId (24578)
{-# LINE 192 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 195 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DNA_RT :: ProtocolId
{-# LINE 199 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DNA_RT = ProtocolId (24579)
{-# LINE 200 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 203 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_LAT :: ProtocolId
{-# LINE 207 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_LAT = ProtocolId (24580)
{-# LINE 208 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 211 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DIAG :: ProtocolId
{-# LINE 215 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DIAG = ProtocolId (24581)
{-# LINE 216 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 219 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_CUST :: ProtocolId
{-# LINE 223 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_CUST = ProtocolId (24582)
{-# LINE 224 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 227 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_SCA :: ProtocolId
{-# LINE 231 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_SCA = ProtocolId (24583)
{-# LINE 232 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 235 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_TEB :: ProtocolId
{-# LINE 239 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_TEB = ProtocolId (25944)
{-# LINE 240 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 243 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_RARP :: ProtocolId
{-# LINE 247 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_RARP = ProtocolId (32821)
{-# LINE 248 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 251 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ATALK :: ProtocolId
{-# LINE 255 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ATALK = ProtocolId (32923)
{-# LINE 256 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 259 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_AARP :: ProtocolId
{-# LINE 263 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_AARP = ProtocolId (33011)
{-# LINE 264 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 267 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_8021Q :: ProtocolId
{-# LINE 271 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_8021Q = ProtocolId (33024)
{-# LINE 272 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 275 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IPX :: ProtocolId
{-# LINE 279 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IPX = ProtocolId (33079)
{-# LINE 280 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 283 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IPV6 :: ProtocolId
{-# LINE 287 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IPV6 = ProtocolId (34525)
{-# LINE 288 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 291 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PAUSE :: ProtocolId
{-# LINE 295 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PAUSE = ProtocolId (34824)
{-# LINE 296 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 299 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_SLOW :: ProtocolId
{-# LINE 303 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_SLOW = ProtocolId (34825)
{-# LINE 304 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 307 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_WCCP :: ProtocolId
{-# LINE 311 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_WCCP = ProtocolId (34878)
{-# LINE 312 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 315 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PPP_DISC :: ProtocolId
{-# LINE 319 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PPP_DISC = ProtocolId (34915)
{-# LINE 320 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 323 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PPP_SES :: ProtocolId
{-# LINE 327 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PPP_SES = ProtocolId (34916)
{-# LINE 328 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 331 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_MPLS_UC :: ProtocolId
{-# LINE 335 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_MPLS_UC = ProtocolId (34887)
{-# LINE 336 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 339 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_MPLS_MC :: ProtocolId
{-# LINE 343 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_MPLS_MC = ProtocolId (34888)
{-# LINE 344 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 347 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ATMMPOA :: ProtocolId
{-# LINE 351 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ATMMPOA = ProtocolId (34892)
{-# LINE 352 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 355 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ATMFATE :: ProtocolId
{-# LINE 359 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ATMFATE = ProtocolId (34948)
{-# LINE 360 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 363 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PAE :: ProtocolId
{-# LINE 367 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PAE = ProtocolId (34958)
{-# LINE 368 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 371 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_AOE :: ProtocolId
{-# LINE 375 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_AOE = ProtocolId (34978)
{-# LINE 376 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 379 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_TIPC :: ProtocolId
{-# LINE 383 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_TIPC = ProtocolId (35018)
{-# LINE 384 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 387 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_1588 :: ProtocolId
{-# LINE 391 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_1588 = ProtocolId (35063)
{-# LINE 392 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 395 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_FCOE :: ProtocolId
{-# LINE 399 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_FCOE = ProtocolId (35078)
{-# LINE 400 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 403 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_FIP :: ProtocolId
{-# LINE 407 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_FIP = ProtocolId (35092)
{-# LINE 408 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 411 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_EDSA :: ProtocolId
{-# LINE 415 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_EDSA = ProtocolId (56026)
{-# LINE 416 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 419 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_802_3 :: ProtocolId
{-# LINE 423 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_802_3 = ProtocolId (1)
{-# LINE 424 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 427 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_AX25 :: ProtocolId
{-# LINE 431 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_AX25 = ProtocolId (2)
{-# LINE 432 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 435 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ALL :: ProtocolId
{-# LINE 439 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ALL = ProtocolId (3)
{-# LINE 440 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 443 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_802_2 :: ProtocolId
{-# LINE 447 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_802_2 = ProtocolId (4)
{-# LINE 448 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 451 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_SNAP :: ProtocolId
{-# LINE 455 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_SNAP = ProtocolId (5)
{-# LINE 456 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 459 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DDCMP :: ProtocolId
{-# LINE 463 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DDCMP = ProtocolId (6)
{-# LINE 464 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 467 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_WAN_PPP :: ProtocolId
{-# LINE 471 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_WAN_PPP = ProtocolId (7)
{-# LINE 472 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 475 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PPP_MP :: ProtocolId
{-# LINE 479 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PPP_MP = ProtocolId (8)
{-# LINE 480 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 483 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_LOCALTALK :: ProtocolId
{-# LINE 487 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_LOCALTALK = ProtocolId (9)
{-# LINE 488 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 491 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_CAN :: ProtocolId
{-# LINE 495 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_CAN = ProtocolId (12)
{-# LINE 496 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 499 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PPPTALK :: ProtocolId
{-# LINE 503 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PPPTALK = ProtocolId (16)
{-# LINE 504 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 507 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_TR_802_2 :: ProtocolId
{-# LINE 511 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_TR_802_2 = ProtocolId (17)
{-# LINE 512 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 515 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_MOBITEX :: ProtocolId
{-# LINE 519 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_MOBITEX = ProtocolId (21)
{-# LINE 520 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 523 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_CONTROL :: ProtocolId
{-# LINE 527 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_CONTROL = ProtocolId (22)
{-# LINE 528 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 531 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IRDA :: ProtocolId
{-# LINE 535 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IRDA = ProtocolId (23)
{-# LINE 536 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 539 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ECONET :: ProtocolId
{-# LINE 543 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ECONET = ProtocolId (24)
{-# LINE 544 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 547 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_HDLC :: ProtocolId
{-# LINE 551 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_HDLC = ProtocolId (25)
{-# LINE 552 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 555 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ARCNET :: ProtocolId
{-# LINE 559 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_ARCNET = ProtocolId (26)
{-# LINE 560 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 563 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DSA :: ProtocolId
{-# LINE 567 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_DSA = ProtocolId (27)
{-# LINE 568 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 571 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_TRAILER :: ProtocolId
{-# LINE 575 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_TRAILER = ProtocolId (28)
{-# LINE 576 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 579 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PHONET :: ProtocolId
{-# LINE 583 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_PHONET = ProtocolId (245)
{-# LINE 584 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 587 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IEEE802154 :: ProtocolId
{-# LINE 591 "Network/Socket/Linux/Types.hsc" #-}
pattern ETH_P_IEEE802154 = ProtocolId (246)
{-# LINE 592 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 595 "Network/Socket/Linux/Types.hsc" #-}
newtype PacketType = PacketType { PacketType -> CUChar
packPacketType :: CUChar } deriving (PacketType -> PacketType -> Bool
(PacketType -> PacketType -> Bool)
-> (PacketType -> PacketType -> Bool) -> Eq PacketType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PacketType -> PacketType -> Bool
$c/= :: PacketType -> PacketType -> Bool
== :: PacketType -> PacketType -> Bool
$c== :: PacketType -> PacketType -> Bool
Eq, Eq PacketType
Eq PacketType =>
(PacketType -> PacketType -> Ordering)
-> (PacketType -> PacketType -> Bool)
-> (PacketType -> PacketType -> Bool)
-> (PacketType -> PacketType -> Bool)
-> (PacketType -> PacketType -> Bool)
-> (PacketType -> PacketType -> PacketType)
-> (PacketType -> PacketType -> PacketType)
-> Ord PacketType
PacketType -> PacketType -> Bool
PacketType -> PacketType -> Ordering
PacketType -> PacketType -> PacketType
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PacketType -> PacketType -> PacketType
$cmin :: PacketType -> PacketType -> PacketType
max :: PacketType -> PacketType -> PacketType
$cmax :: PacketType -> PacketType -> PacketType
>= :: PacketType -> PacketType -> Bool
$c>= :: PacketType -> PacketType -> Bool
> :: PacketType -> PacketType -> Bool
$c> :: PacketType -> PacketType -> Bool
<= :: PacketType -> PacketType -> Bool
$c<= :: PacketType -> PacketType -> Bool
< :: PacketType -> PacketType -> Bool
$c< :: PacketType -> PacketType -> Bool
compare :: PacketType -> PacketType -> Ordering
$ccompare :: PacketType -> PacketType -> Ordering
$cp1Ord :: Eq PacketType
Ord)
isSupportedPacketType :: PacketType -> Bool
isSupportedPacketType :: PacketType -> Bool
isSupportedPacketType f :: PacketType
f = case PacketType
f of
UnsupportedPacketType -> Bool
False
GeneralPacketType _ -> Bool
True
pattern GeneralPacketType :: CUChar -> PacketType
pattern $bGeneralPacketType :: CUChar -> PacketType
$mGeneralPacketType :: forall r. PacketType -> (CUChar -> r) -> (Void# -> r) -> r
GeneralPacketType n = PacketType n
{-# LINE 620 "Network/Socket/Linux/Types.hsc" #-}
{-# COMPLETE GeneralPacketType #-}
{-# LINE 622 "Network/Socket/Linux/Types.hsc" #-}
unpackPacketType :: CUChar -> PacketType
unpackPacketType :: CUChar -> PacketType
unpackPacketType = CUChar -> PacketType
PacketType
{-# INLINE unpackPacketType #-}
pattern UnsupportedPacketType :: PacketType
pattern $bUnsupportedPacketType :: PacketType
$mUnsupportedPacketType :: forall r. PacketType -> (Void# -> r) -> (Void# -> r) -> r
UnsupportedPacketType = PacketType (-1)
pattern PACKET_HOST :: PacketType
{-# LINE 636 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_HOST = PacketType (0)
{-# LINE 637 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 640 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_BROADCAST :: PacketType
{-# LINE 644 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_BROADCAST = PacketType (1)
{-# LINE 645 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 648 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_MULTICAST :: PacketType
{-# LINE 652 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_MULTICAST = PacketType (2)
{-# LINE 653 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 656 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_OTHERHOST :: PacketType
{-# LINE 660 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_OTHERHOST = PacketType (3)
{-# LINE 661 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 664 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_OUTGOING :: PacketType
{-# LINE 668 "Network/Socket/Linux/Types.hsc" #-}
pattern PACKET_OUTGOING = PacketType (4)
{-# LINE 669 "Network/Socket/Linux/Types.hsc" #-}
{-# LINE 672 "Network/Socket/Linux/Types.hsc" #-}
data PhysicalAddress = PhysicalAddress { PhysicalAddress -> CUChar
addressLength :: SllHaLen
, PhysicalAddress -> SllAddr
sllAddr :: SllAddr }
deriving (Int -> PhysicalAddress -> ShowS
[PhysicalAddress] -> ShowS
PhysicalAddress -> String
(Int -> PhysicalAddress -> ShowS)
-> (PhysicalAddress -> String)
-> ([PhysicalAddress] -> ShowS)
-> Show PhysicalAddress
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PhysicalAddress] -> ShowS
$cshowList :: [PhysicalAddress] -> ShowS
show :: PhysicalAddress -> String
$cshow :: PhysicalAddress -> String
showsPrec :: Int -> PhysicalAddress -> ShowS
$cshowsPrec :: Int -> PhysicalAddress -> ShowS
Show, PhysicalAddress -> PhysicalAddress -> Bool
(PhysicalAddress -> PhysicalAddress -> Bool)
-> (PhysicalAddress -> PhysicalAddress -> Bool)
-> Eq PhysicalAddress
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalAddress -> PhysicalAddress -> Bool
$c/= :: PhysicalAddress -> PhysicalAddress -> Bool
== :: PhysicalAddress -> PhysicalAddress -> Bool
$c== :: PhysicalAddress -> PhysicalAddress -> Bool
Eq)
type PhysicalAddressBytes = (Word8, Word8, Word8, Word8, Word8, Word8, Word8, Word8)
address :: PhysicalAddress -> PhysicalAddressBytes
address :: PhysicalAddress -> PhysicalAddressBytes
address addr :: PhysicalAddress
addr = PhysicalAddressBytes
bytes where
(SllAddr bytes :: PhysicalAddressBytes
bytes) = PhysicalAddress -> SllAddr
sllAddr PhysicalAddress
addr
mkPhysicalAddress :: Int -> PhysicalAddressBytes -> Maybe PhysicalAddress
mkPhysicalAddress :: Int -> PhysicalAddressBytes -> Maybe PhysicalAddress
mkPhysicalAddress haLen :: Int
haLen addr :: PhysicalAddressBytes
addr
| Int
haLen Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= 0 Bool -> Bool -> Bool
&& Int
haLen Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 8 = PhysicalAddress -> Maybe PhysicalAddress
forall a. a -> Maybe a
Just (PhysicalAddress -> Maybe PhysicalAddress)
-> PhysicalAddress -> Maybe PhysicalAddress
forall a b. (a -> b) -> a -> b
$ PhysicalAddress :: CUChar -> SllAddr -> PhysicalAddress
PhysicalAddress { addressLength :: CUChar
addressLength = Int -> CUChar
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
haLen
, sllAddr :: SllAddr
sllAddr = PhysicalAddressBytes -> SllAddr
SllAddr PhysicalAddressBytes
addr }
| Bool
otherwise = Maybe PhysicalAddress
forall a. Maybe a
Nothing
macAddress :: (Word8, Word8, Word8, Word8, Word8, Word8) -> PhysicalAddress
macAddress :: (Word8, Word8, Word8, Word8, Word8, Word8) -> PhysicalAddress
macAddress (a :: Word8
a,b :: Word8
b,c :: Word8
c,d :: Word8
d,e :: Word8
e,f :: Word8
f) = PhysicalAddress :: CUChar -> SllAddr -> PhysicalAddress
PhysicalAddress { addressLength :: CUChar
addressLength = 6
, sllAddr :: SllAddr
sllAddr = PhysicalAddressBytes -> SllAddr
SllAddr (Word8
a,Word8
b,Word8
c,Word8
d,Word8
e,Word8
f,0,0) }
emptyAddress :: PhysicalAddress
emptyAddress :: PhysicalAddress
emptyAddress = PhysicalAddress :: CUChar -> SllAddr -> PhysicalAddress
PhysicalAddress { addressLength :: CUChar
addressLength = 0, sllAddr :: SllAddr
sllAddr = PhysicalAddressBytes -> SllAddr
SllAddr (0,0,0,0,0,0,0,0) }
data SockAddrLl = SockAddrLl { SockAddrLl -> Family
sllFamily :: Family
, SockAddrLl -> ProtocolId
sllProtocol :: ProtocolId
, SockAddrLl -> ProtocolNumber
sllIfIndex :: SllIfIndex
, SockAddrLl -> CUShort
sllHaType :: SllHaType
, SockAddrLl -> PacketType
sllPktType :: PacketType
, SockAddrLl -> PhysicalAddress
physicalAddress :: PhysicalAddress
}
type IfIndex = Int
mkBindSockAddrLl :: Family -> ProtocolId -> IfIndex -> SockAddrLl
mkBindSockAddrLl :: Family -> ProtocolId -> Int -> SockAddrLl
mkBindSockAddrLl family :: Family
family protocol :: ProtocolId
protocol index :: Int
index =
SockAddrLl :: Family
-> ProtocolId
-> ProtocolNumber
-> CUShort
-> PacketType
-> PhysicalAddress
-> SockAddrLl
SockAddrLl { sllFamily :: Family
sllFamily = Family
family
, sllProtocol :: ProtocolId
sllProtocol = ProtocolId
protocol
, sllIfIndex :: ProtocolNumber
sllIfIndex = Int -> ProtocolNumber
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
index
, sllHaType :: CUShort
sllHaType = 0
, sllPktType :: PacketType
sllPktType = CUChar -> PacketType
PacketType 0
, physicalAddress :: PhysicalAddress
physicalAddress = PhysicalAddress
emptyAddress }
mkSendSockAddrLl :: Family -> ProtocolId -> IfIndex -> PhysicalAddress -> SockAddrLl
mkSendSockAddrLl :: Family -> ProtocolId -> Int -> PhysicalAddress -> SockAddrLl
mkSendSockAddrLl family :: Family
family protocol :: ProtocolId
protocol index :: Int
index addr :: PhysicalAddress
addr =
SockAddrLl :: Family
-> ProtocolId
-> ProtocolNumber
-> CUShort
-> PacketType
-> PhysicalAddress
-> SockAddrLl
SockAddrLl { sllFamily :: Family
sllFamily = Family
family
, sllProtocol :: ProtocolId
sllProtocol = ProtocolId
protocol
, sllIfIndex :: ProtocolNumber
sllIfIndex = (Int -> ProtocolNumber
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
index)
, sllHaType :: CUShort
sllHaType = 0
, sllPktType :: PacketType
sllPktType = (CUChar -> PacketType
PacketType 0)
, physicalAddress :: PhysicalAddress
physicalAddress = PhysicalAddress
addr }
instance SocketAddress SockAddrLl where
sizeOfSocketAddress :: SockAddrLl -> Int
sizeOfSocketAddress = SockAddrLl -> Int
sizeOfSockAddrLl
peekSocketAddress :: Ptr SockAddrLl -> IO SockAddrLl
peekSocketAddress = Ptr SockAddrLl -> IO SockAddrLl
peekSockAddrLl
pokeSocketAddress :: Ptr a -> SockAddrLl -> IO ()
pokeSocketAddress = Ptr a -> SockAddrLl -> IO ()
forall a. Ptr a -> SockAddrLl -> IO ()
pokeSockAddrLl
newtype SllAddr = SllAddr (Word8, Word8, Word8, Word8, Word8, Word8, Word8, Word8) deriving (Int -> SllAddr -> ShowS
[SllAddr] -> ShowS
SllAddr -> String
(Int -> SllAddr -> ShowS)
-> (SllAddr -> String) -> ([SllAddr] -> ShowS) -> Show SllAddr
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SllAddr] -> ShowS
$cshowList :: [SllAddr] -> ShowS
show :: SllAddr -> String
$cshow :: SllAddr -> String
showsPrec :: Int -> SllAddr -> ShowS
$cshowsPrec :: Int -> SllAddr -> ShowS
Show, SllAddr -> SllAddr -> Bool
(SllAddr -> SllAddr -> Bool)
-> (SllAddr -> SllAddr -> Bool) -> Eq SllAddr
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SllAddr -> SllAddr -> Bool
$c/= :: SllAddr -> SllAddr -> Bool
== :: SllAddr -> SllAddr -> Bool
$c== :: SllAddr -> SllAddr -> Bool
Eq)
instance Storable SllAddr where
sizeOf :: SllAddr -> Int
sizeOf _ = 8
alignment :: SllAddr -> Int
alignment _ = 0
peek :: Ptr SllAddr -> IO SllAddr
peek p :: Ptr SllAddr
p = do
Word8
a <- Ptr SllAddr -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SllAddr
p 0
Word8
b <- Ptr SllAddr -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SllAddr
p 1
Word8
c <- Ptr SllAddr -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SllAddr
p 2
Word8
d <- Ptr SllAddr -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SllAddr
p 3
Word8
e <- Ptr SllAddr -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SllAddr
p 4
Word8
f <- Ptr SllAddr -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SllAddr
p 5
Word8
g <- Ptr SllAddr -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SllAddr
p 6
Word8
h <- Ptr SllAddr -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SllAddr
p 7
SllAddr -> IO SllAddr
forall (m :: * -> *) a. Monad m => a -> m a
return (SllAddr -> IO SllAddr) -> SllAddr -> IO SllAddr
forall a b. (a -> b) -> a -> b
$ PhysicalAddressBytes -> SllAddr
SllAddr (Word8
a, Word8
b, Word8
c, Word8
d, Word8
e, Word8
f, Word8
g, Word8
h)
poke :: Ptr SllAddr -> SllAddr -> IO ()
poke p :: Ptr SllAddr
p (SllAddr (a :: Word8
a, b :: Word8
b, c :: Word8
c, d :: Word8
d, e :: Word8
e, f :: Word8
f, g :: Word8
g, h :: Word8
h)) = do
Ptr SllAddr -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SllAddr
p 0 Word8
a
Ptr SllAddr -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SllAddr
p 1 Word8
b
Ptr SllAddr -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SllAddr
p 2 Word8
c
Ptr SllAddr -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SllAddr
p 3 Word8
d
Ptr SllAddr -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SllAddr
p 4 Word8
e
Ptr SllAddr -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SllAddr
p 5 Word8
f
Ptr SllAddr -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SllAddr
p 6 Word8
g
Ptr SllAddr -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SllAddr
p 7 Word8
h
type SllIfIndex = CInt
type SllHaType = CUShort
type SllHaLen = CUChar
sizeOfSockAddrLl :: SockAddrLl -> Int
sizeOfSockAddrLl :: SockAddrLl -> Int
sizeOfSockAddrLl SockAddrLl{} = 20
{-# LINE 785 "Network/Socket/Linux/Types.hsc" #-}
pokeSockAddrLl :: Ptr a -> SockAddrLl -> IO ()
pokeSockAddrLl :: Ptr a -> SockAddrLl -> IO ()
pokeSockAddrLl p :: Ptr a
p addr :: SockAddrLl
addr = do
Ptr a -> ProtocolNumber -> CSize -> IO ()
forall a. Ptr a -> ProtocolNumber -> CSize -> IO ()
memset Ptr a
p 0 (20)
{-# LINE 790 "Network/Socket/Linux/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 0)) p (packFamily . sllFamily $ addr)
{-# LINE 791 "Network/Socket/Linux/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 2)) p (htons . fromIntegral . packProtocolId . sllProtocol $ addr)
{-# LINE 792 "Network/Socket/Linux/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 4)) p $ sllIfIndex addr
{-# LINE 793 "Network/Socket/Linux/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) p $ sllHaType addr
{-# LINE 794 "Network/Socket/Linux/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 10)) p (packPacketType . sllPktType $ addr)
{-# LINE 795 "Network/Socket/Linux/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 11)) p $ (addressLength . physicalAddress $ addr)
{-# LINE 796 "Network/Socket/Linux/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 12)) p $ (sllAddr . physicalAddress $ addr)
{-# LINE 797 "Network/Socket/Linux/Types.hsc" #-}
peekSockAddrLl:: Ptr SockAddrLl -> IO SockAddrLl
peekSockAddrLl :: Ptr SockAddrLl -> IO SockAddrLl
peekSockAddrLl p :: Ptr SockAddrLl
p = do
Family
sllFamily <- ProtocolNumber -> Family
unpackFamily (ProtocolNumber -> Family) -> IO ProtocolNumber -> IO Family
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((\hsc_ptr :: Ptr SockAddrLl
hsc_ptr -> Ptr SockAddrLl -> Int -> IO ProtocolNumber
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SockAddrLl
hsc_ptr 0)) Ptr SockAddrLl
p
{-# LINE 802 "Network/Socket/Linux/Types.hsc" #-}
sllProtocol <- (unpackProtocolId . fromIntegral . ntohs) <$> ((\hsc_ptr -> peekByteOff hsc_ptr 2)) p
{-# LINE 803 "Network/Socket/Linux/Types.hsc" #-}
sllIfIndex <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) p
{-# LINE 804 "Network/Socket/Linux/Types.hsc" #-}
sllHaType <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p
{-# LINE 805 "Network/Socket/Linux/Types.hsc" #-}
sllPktType <- unpackPacketType <$> ((\hsc_ptr -> peekByteOff hsc_ptr 10)) p
{-# LINE 806 "Network/Socket/Linux/Types.hsc" #-}
sllHaLen <- ((\hsc_ptr -> peekByteOff hsc_ptr 11)) p
{-# LINE 807 "Network/Socket/Linux/Types.hsc" #-}
sllAddr <- ((\hsc_ptr -> peekByteOff hsc_ptr 12)) p
{-# LINE 808 "Network/Socket/Linux/Types.hsc" #-}
return $ SockAddrLl sllFamily sllProtocol sllIfIndex sllHaType sllPktType (PhysicalAddress sllHaLen sllAddr)
protocolIdBijection :: Bijection ProtocolId String
protocolIdBijection :: Bijection ProtocolId String
protocolIdBijection =
[ (ProtocolId
UnsupportedProtocolId, "UnsupportedProtocolId")
, (ProtocolId
ETH_P_LOOP, "ETH_P_LOOP")
, (ProtocolId
ETH_P_PUP, "ETH_P_PUP")
, (ProtocolId
ETH_P_PUPAT, "ETH_P_PUPAT")
, (ProtocolId
ETH_P_IP, "ETH_P_IP")
, (ProtocolId
ETH_P_X25, "ETH_P_X25")
, (ProtocolId
ETH_P_ARP, "ETH_P_ARP")
, (ProtocolId
ETH_P_BPQ, "ETH_P_BPQ")
, (ProtocolId
ETH_P_IEEEPUP, "ETH_P_IEEEPUP")
, (ProtocolId
ETH_P_IEEEPUPAT, "ETH_P_IEEEPUPAT")
, (ProtocolId
ETH_P_DEC, "ETH_P_DEC")
, (ProtocolId
ETH_P_DNA_DL, "ETH_P_DNA_DL")
, (ProtocolId
ETH_P_DNA_RC, "ETH_P_DNA_RC")
, (ProtocolId
ETH_P_DNA_RT, "ETH_P_DNA_RT")
, (ProtocolId
ETH_P_LAT, "ETH_P_LAT")
, (ProtocolId
ETH_P_DIAG, "ETH_P_DIAG")
, (ProtocolId
ETH_P_CUST, "ETH_P_CUST")
, (ProtocolId
ETH_P_SCA, "ETH_P_SCA")
, (ProtocolId
ETH_P_TEB, "ETH_P_TEB")
, (ProtocolId
ETH_P_RARP, "ETH_P_RARP")
, (ProtocolId
ETH_P_ATALK, "ETH_P_ATALK")
, (ProtocolId
ETH_P_AARP, "ETH_P_AARP")
, (ProtocolId
ETH_P_8021Q, "ETH_P_8021Q")
, (ProtocolId
ETH_P_IPX, "ETH_P_IPX")
, (ProtocolId
ETH_P_IPV6, "ETH_P_IPV6")
, (ProtocolId
ETH_P_PAUSE, "ETH_P_PAUSE")
, (ProtocolId
ETH_P_SLOW, "ETH_P_SLOW")
, (ProtocolId
ETH_P_WCCP, "ETH_P_WCCP")
, (ProtocolId
ETH_P_PPP_DISC, "ETH_P_PPP_DISC")
, (ProtocolId
ETH_P_PPP_SES, "ETH_P_PPP_SES")
, (ProtocolId
ETH_P_MPLS_UC, "ETH_P_MPLS_UC")
, (ProtocolId
ETH_P_MPLS_MC, "ETH_P_MPLS_MC")
, (ProtocolId
ETH_P_ATMMPOA, "ETH_P_ATMMPOA")
, (ProtocolId
ETH_P_ATMFATE, "ETH_P_ATMFATE")
, (ProtocolId
ETH_P_PAE, "ETH_P_PAE")
, (ProtocolId
ETH_P_AOE, "ETH_P_AOE")
, (ProtocolId
ETH_P_TIPC, "ETH_P_TIPC")
, (ProtocolId
ETH_P_1588, "ETH_P_1588")
, (ProtocolId
ETH_P_FCOE, "ETH_P_FCOE")
, (ProtocolId
ETH_P_FIP, "ETH_P_FIP")
, (ProtocolId
ETH_P_EDSA, "ETH_P_EDSA")
, (ProtocolId
ETH_P_802_3, "ETH_P_802_3")
, (ProtocolId
ETH_P_AX25, "ETH_P_AX25")
, (ProtocolId
ETH_P_ALL, "ETH_P_ALL")
, (ProtocolId
ETH_P_802_2, "ETH_P_802_2")
, (ProtocolId
ETH_P_SNAP, "ETH_P_SNAP")
, (ProtocolId
ETH_P_DDCMP, "ETH_P_DDCMP")
, (ProtocolId
ETH_P_WAN_PPP, "ETH_P_WAN_PPP")
, (ProtocolId
ETH_P_PPP_MP, "ETH_P_PPP_MP")
, (ProtocolId
ETH_P_LOCALTALK, "ETH_P_LOCALTALK")
, (ProtocolId
ETH_P_CAN, "ETH_P_CAN")
, (ProtocolId
ETH_P_PPPTALK, "ETH_P_PPPTALK")
, (ProtocolId
ETH_P_TR_802_2, "ETH_P_TR_802_2")
, (ProtocolId
ETH_P_MOBITEX, "ETH_P_MOBITEX")
, (ProtocolId
ETH_P_CONTROL, "ETH_P_CONTROL")
, (ProtocolId
ETH_P_IRDA, "ETH_P_IRDA")
, (ProtocolId
ETH_P_ECONET, "ETH_P_ECONET")
, (ProtocolId
ETH_P_HDLC, "ETH_P_HDLC")
, (ProtocolId
ETH_P_ARCNET, "ETH_P_ARCNET")
, (ProtocolId
ETH_P_DSA, "ETH_P_DSA")
, (ProtocolId
ETH_P_TRAILER, "ETH_P_TRAILER")
, (ProtocolId
ETH_P_PHONET, "ETH_P_PHONET")
, (ProtocolId
ETH_P_IEEE802154, "ETH_P_IEEE802154")]
instance Show ProtocolId where
showsPrec :: Int -> ProtocolId -> ShowS
showsPrec = Bijection ProtocolId String
-> (Int -> ProtocolId -> ShowS) -> Int -> ProtocolId -> ShowS
forall a.
Eq a =>
Bijection a String -> (Int -> a -> ShowS) -> Int -> a -> ShowS
bijectiveShow Bijection ProtocolId String
protocolIdBijection Int -> ProtocolId -> ShowS
def
where
gf :: String
gf = "GeneralProtocolId"
def :: Int -> ProtocolId -> ShowS
def = String
-> (ProtocolId -> CUShort)
-> (Int -> CUShort -> ShowS)
-> Int
-> ProtocolId
-> ShowS
forall a b.
Eq a =>
String -> (a -> b) -> (Int -> b -> ShowS) -> Int -> a -> ShowS
defShow String
gf ProtocolId -> CUShort
packProtocolId Int -> CUShort -> ShowS
forall a. Show a => Int -> a -> ShowS
_showInt
instance Read ProtocolId where
readPrec :: ReadPrec ProtocolId
readPrec = Bijection ProtocolId String
-> ReadPrec ProtocolId -> ReadPrec ProtocolId
forall a. Eq a => Bijection a String -> ReadPrec a -> ReadPrec a
bijectiveRead Bijection ProtocolId String
protocolIdBijection ReadPrec ProtocolId
def
where
gf :: String
gf = "GeneralProtocolId"
def :: ReadPrec ProtocolId
def = String
-> (CUShort -> ProtocolId)
-> ReadPrec CUShort
-> ReadPrec ProtocolId
forall a b. Eq a => String -> (b -> a) -> ReadPrec b -> ReadPrec a
defRead String
gf CUShort -> ProtocolId
unpackProtocolId ReadPrec CUShort
forall a. (Bounded a, Integral a) => ReadPrec a
_readInt
packetTypeBijection :: Bijection PacketType String
packetTypeBijection :: Bijection PacketType String
packetTypeBijection =
[ (PacketType
UnsupportedPacketType, "UnsupportedPacketType")
, (PacketType
PACKET_HOST, "PACKET_HOST")
, (PacketType
PACKET_BROADCAST, "PACKET_BROADCAST")
, (PacketType
PACKET_MULTICAST, "PACKET_MULTICAST")
, (PacketType
PACKET_OTHERHOST, "PACKET_OTHERHOST")
, (PacketType
PACKET_OUTGOING, "PACKET_OUTGOING")]
instance Show PacketType where
showsPrec :: Int -> PacketType -> ShowS
showsPrec = Bijection PacketType String
-> (Int -> PacketType -> ShowS) -> Int -> PacketType -> ShowS
forall a.
Eq a =>
Bijection a String -> (Int -> a -> ShowS) -> Int -> a -> ShowS
bijectiveShow Bijection PacketType String
packetTypeBijection Int -> PacketType -> ShowS
def
where
gf :: String
gf = "GeneralPacketType"
def :: Int -> PacketType -> ShowS
def = String
-> (PacketType -> CUChar)
-> (Int -> CUChar -> ShowS)
-> Int
-> PacketType
-> ShowS
forall a b.
Eq a =>
String -> (a -> b) -> (Int -> b -> ShowS) -> Int -> a -> ShowS
defShow String
gf PacketType -> CUChar
packPacketType Int -> CUChar -> ShowS
forall a. Show a => Int -> a -> ShowS
_showInt
instance Read PacketType where
readPrec :: ReadPrec PacketType
readPrec = Bijection PacketType String
-> ReadPrec PacketType -> ReadPrec PacketType
forall a. Eq a => Bijection a String -> ReadPrec a -> ReadPrec a
bijectiveRead Bijection PacketType String
packetTypeBijection ReadPrec PacketType
def
where
gf :: String
gf = "GeneralPacketType"
def :: ReadPrec PacketType
def = String
-> (CUChar -> PacketType) -> ReadPrec CUChar -> ReadPrec PacketType
forall a b. Eq a => String -> (b -> a) -> ReadPrec b -> ReadPrec a
defRead String
gf CUChar -> PacketType
unpackPacketType ReadPrec CUChar
forall a. (Bounded a, Integral a) => ReadPrec a
_readInt