net-spider-rpl-0.1.0.0: src/NetSpider/RPL/IPv6.hs
-- |
-- Module: NetSpider.RPL.IPv6
-- Description:
-- Maintainer: Toshio Ito <debug.ito@gmail.com>
--
-- __This module is for internal use.__
module NetSpider.RPL.IPv6
( Prefix,
InterfaceID,
isLinkLocal,
getPrefix,
setPrefix
) where
import Data.Bits ((.&.), shift)
import Data.Word (Word64)
import Net.IPv6 (IPv6(..), toWord16s)
type Prefix = Word64
type InterfaceID = Word64
isLinkLocal :: IPv6 -> Bool
isLinkLocal addr = (== 0xfe80) $ (.&. bit_mask) $ top_word
where
(top_word, _, _, _, _, _, _, _) = toWord16s addr
bit_mask = (2 ^ (10 :: Int) - 1) `shift` 6
getPrefix :: IPv6 -> Prefix
getPrefix = ipv6A
setPrefix :: Prefix -> IPv6 -> IPv6
setPrefix p orig = orig { ipv6A = p }