packages feed

asif 3.0.0 → 3.1.0

raw patch · 4 files changed

+44/−1 lines, 4 filesdep +networknew-uploaderPVP ok

version bump matches the API change (PVP)

Dependencies added: network

API changes (from Hackage documentation)

+ Arbor.File.Format.Asif.Data.Ip: ipv4ToIpv6 :: IPv4 -> IPv6
+ Arbor.File.Format.Asif.Data.Ip: ipv6ToString :: IPv6 -> String
+ Arbor.File.Format.Asif.Data.Ip: ipv6ToWord32x4 :: IPv6 -> (Word32, Word32, Word32, Word32)
+ Arbor.File.Format.Asif.Data.Ip: stringToIpv6 :: String -> Maybe IPv6
+ Arbor.File.Format.Asif.Data.Ip: word32x4ToIpv6 :: (Word32, Word32, Word32, Word32) -> IPv6
+ Arbor.File.Format.Asif.Format: Ipv6 :: Format

Files

app/App/Commands/Dump.hs view
@@ -23,6 +23,7 @@ import Data.Thyme.Clock.POSIX          (POSIXTime) import Data.Thyme.Format               (formatTime) import Data.Thyme.Time.Core+import Data.Word import HaskellWorks.Data.Bits.BitShow import Numeric                         (showHex) import Options.Applicative@@ -64,6 +65,14 @@ showTime :: FormatTime t => t -> String showTime = formatTime defaultTimeLocale (iso8601DateFormat (Just "%H:%M:%S %Z")) +getWord32x4 :: G.Get (Word32, Word32, Word32, Word32)+getWord32x4 = do+  a <- G.getWord32be+  b <- G.getWord32be+  c <- G.getWord32be+  d <- G.getWord32be+  return (a, b, c, d)+ runDump :: MonadResource m => DumpOptions -> m () runDump opt = do   (_, hIn)  <- openFileOrStd (opt ^. the @"source") IO.ReadMode@@ -107,6 +116,16 @@               let w = G.runGet G.getWord32le (LBS.take 8 (bs <> LBS.replicate 4 0))               let ipString = w & word32ToIpv4 & ipv4ToString               liftIO $ IO.hPutStrLn hOut $ ipString <> replicate (16 - length ipString) ' ' <> "(" <> show w <> ")"+          Just (Known F.Ipv6) ->+            forM_ (LBS.chunkBy 16 (segment ^. the @"payload")) $ \bs -> do+              let (a, b, c, d) = G.runGet getWord32x4 (LBS.take 16 (bs <> LBS.replicate 16 0))+              if a == 0 && b == 0 && c == 0xFFFF+                then do+                  let ipString = d & word32ToIpv4 & ipv4ToString+                  liftIO $ IO.hPutStrLn hOut $ ipString <> replicate (64 - length ipString) ' ' <> "(" <> show d <> ")"+                else do+                  let ipString = word32x4ToIpv6 (a, b, c, d) & ipv6ToString+                  liftIO $ IO.hPutStrLn hOut $ ipString <> replicate (64 - length ipString) ' ' <> "(" <> show (a, b, c, d) <> ")"           Just (Known F.Int64LE) ->             forM_ (LBS.chunkBy 8 (segment ^. the @"payload")) $ \bs -> do               let w = G.runGet G.getInt64le (LBS.take 8 (bs <> LBS.replicate 8 0))
asif.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           asif-version:        3.0.0+version:        3.1.0 description:    Please see the README on Github at <https://github.com/packetloop/asif#readme> category:       Services homepage:       https://github.com/packetloop/asif#readme@@ -46,6 +46,7 @@     , hw-ip     , iproute     , lens+    , network     , old-locale     , resourcet     , temporary-resourcet@@ -97,6 +98,7 @@     , hw-ip     , iproute     , lens+    , network     , old-locale     , resourcet     , temporary-resourcet@@ -140,6 +142,7 @@     , hw-ip     , iproute     , lens+    , network     , old-locale     , resourcet     , temporary-resourcet
src/Arbor/File/Format/Asif/Data/Ip.hs view
@@ -1,8 +1,13 @@ module Arbor.File.Format.Asif.Data.Ip   ( stringToIpv4+  , stringToIpv6   , ipv4ToString+  , ipv6ToString   , word32ToIpv4+  , word32x4ToIpv6   , ipv4ToWord32+  , ipv6ToWord32x4+  , ipv4ToIpv6   ) where  import Arbor.File.Format.Asif.Data.Read@@ -16,11 +21,26 @@   then readMaybe str   else word32ToIpv4 <$> stringToAnyDigits str +stringToIpv6 :: String -> Maybe IPv6+stringToIpv6 = readMaybe+ ipv4ToString :: IPv4 -> String ipv4ToString = show +ipv6ToString :: IPv6 -> String+ipv6ToString = show+ word32ToIpv4 :: Word32 -> IPv4 word32ToIpv4 = fromHostAddress . toBE32 +word32x4ToIpv6 :: (Word32, Word32, Word32, Word32) -> IPv6+word32x4ToIpv6 = fromHostAddress6+ ipv4ToWord32 :: IPv4 -> Word32 ipv4ToWord32 = fromBE32 . toHostAddress++ipv6ToWord32x4 :: IPv6 -> (Word32, Word32, Word32, Word32)+ipv6ToWord32x4 = toHostAddress6++ipv4ToIpv6 :: IPv4 -> IPv6+ipv4ToIpv6 = ipv4ToIPv6
src/Arbor/File/Format/Asif/Format.hs view
@@ -13,6 +13,7 @@   | Int32LE   | Int64LE   | Ipv4+  | Ipv6   | Repeat Word Format   | StringZ   | Text