iproute 1.7.12 → 1.7.13
raw patch · 6 files changed
+112/−102 lines, 6 filesdep −doctestdep ~base
Dependencies removed: doctest
Dependency ranges changed: base
Files
- Data/IP/Addr.hs +21/−8
- Data/IP/Range.hs +2/−1
- Data/IP/RouteTable/Internal.hs +3/−0
- iproute.cabal +79/−81
- test/IPSpec.hs +7/−1
- test/doctests.hs +0/−11
Data/IP/Addr.hs view
@@ -500,17 +500,30 @@ in if n' <= 255 then f n' else Nothing ip4 :: Parser IPv4-ip4 = skipSpaces >> toIPv4 <$> ip4'+ip4 = skipSpaces >> toIPv4 <$> ip4' True -ip4' :: Parser [Int]-ip4' = do- as <- octet `sepBy1` char '.'- when (length as /= 4) (fail "IPv4 address")+ip4' :: Bool -> Parser [Int]+ip4' checkTermination = do+ a0 <- octet+ _ <- char '.'+ a1 <- octet+ _ <- char '.'+ a2 <- octet+ _ <- char '.'+ a3 <- octet+ let as = [a0, a1, a2, a3]+ skipSpaces+ when checkTermination termination return as skipSpaces :: Parser () skipSpaces = void $ many (char ' ') +termination :: Parser ()+termination = P $ \str -> case str of+ [] -> (Just (), "")+ _ -> (Nothing, str)+ ---------------------------------------------------------------- -- -- IPv6 Parser (RFC 4291)@@ -562,16 +575,16 @@ ip4Embedded :: Parser [Int] ip4Embedded = try (do colon2 bs <- beforeEmbedded- embedded <- ip4'+ embedded <- ip4' True format [] (bs ++ ip4ToIp6 embedded)) -- matches 2001:db8::192.0.2.1 <|> try (do bs1 <- manyTill (try $ hex <* char ':') (char ':') bs2 <- option [] beforeEmbedded- embedded <- ip4'+ embedded <- ip4' True format bs1 (bs2 ++ ip4ToIp6 embedded)) -- matches 2001:db8:11e:c00:aa:bb:192.0.2.1 <|> try (do bs <- beforeEmbedded- embedded <- ip4'+ embedded <- ip4' True let rs = bs ++ ip4ToIp6 embedded check rs return rs)
Data/IP/Range.hs view
@@ -118,7 +118,8 @@ ip4range :: Parser (AddrRange IPv4) ip4range = do- ip <- ip4+ skipSpaces+ ip <- toIPv4 <$> ip4' False len <- maskLen 32 let msk = maskIPv4 len adr = ip `maskedIPv4` msk
Data/IP/RouteTable/Internal.hs view
@@ -27,6 +27,9 @@ import GHC.Generics (Generic, Generic1) import Prelude hiding (lookup) +-- $setup+-- >>> :set -XOverloadedStrings+ ---------------------------------------------------------------- {-|
iproute.cabal view
@@ -1,85 +1,83 @@-Name: iproute-Version: 1.7.12-Author: Kazu Yamamoto <kazu@iij.ad.jp>-Maintainer: Kazu Yamamoto <kazu@iij.ad.jp>-License: BSD3-License-File: LICENSE-Homepage: http://www.mew.org/~kazu/proj/iproute/-Synopsis: IP Routing Table-Description: IP Routing Table is a tree of IP ranges- to search one of them on the longest- match base. It is a kind of TRIE with one- way branching removed. Both IPv4 and IPv6- are supported.-Category: Algorithms, Network-Cabal-Version: >= 1.10-Build-Type: Simple-Tested-With: GHC == 7.8.4- , GHC == 7.10.3- , GHC == 8.0.2- , GHC == 8.2.2- , GHC == 8.4.4- , GHC == 8.6.5- , GHC == 8.8.2+cabal-version: >=1.10+name: iproute+version: 1.7.13+license: BSD3+license-file: LICENSE+maintainer: Kazu Yamamoto <kazu@iij.ad.jp>+author: Kazu Yamamoto <kazu@iij.ad.jp>+tested-with:+ ghc ==7.8.4 ghc ==7.10.3 ghc ==8.0.2 ghc ==8.2.2 ghc ==8.4.4+ ghc ==8.6.5 ghc ==8.8.2 -Library- Default-Language: Haskell2010- GHC-Options: -Wall- Exposed-Modules: Data.IP- Data.IP.Builder- Data.IP.Internal- Data.IP.RouteTable- Data.IP.RouteTable.Internal- Other-Modules: Data.IP.Addr- Data.IP.Mask- Data.IP.Op- Data.IP.Range- Build-Depends: base >= 4.9 && < 5- , appar- , byteorder- , bytestring- , containers- , network- if impl(ghc < 8.0)- Build-Depends: semigroups >= 0.17- if impl(ghc >= 8)- Default-Extensions: Strict StrictData+homepage: http://www.mew.org/~kazu/proj/iproute/+synopsis: IP Routing Table+description:+ IP Routing Table is a tree of IP ranges+ to search one of them on the longest+ match base. It is a kind of TRIE with one+ way branching removed. Both IPv4 and IPv6+ are supported. -Test-Suite doctest- Type: exitcode-stdio-1.0- Default-Language: Haskell2010- HS-Source-Dirs: test- Ghc-Options: -threaded -Wall- Main-Is: doctests.hs- Build-Depends: base >= 4.6 && < 5- , doctest >= 0.9.3- , appar- , byteorder- , bytestring- , network+category: Algorithms, Network+build-type: Simple -Test-Suite spec- Type: exitcode-stdio-1.0- Default-Language: Haskell2010- Hs-Source-Dirs: test- Ghc-Options: -Wall- Main-Is: Spec.hs- Other-Modules: RouteTableSpec- , BuilderSpec- , IPSpec- Build-Depends: base >= 4.6 && < 5- , hspec- , QuickCheck- , appar- , byteorder- , bytestring- , containers- , network- , safe- , iproute- if impl(ghc < 8.0)- Build-Depends: semigroups >= 0.17+source-repository head+ type: git+ location: git://github.com/kazu-yamamoto/iproute.git -Source-Repository head- Type: git- Location: git://github.com/kazu-yamamoto/iproute.git+library+ exposed-modules:+ Data.IP+ Data.IP.Builder+ Data.IP.Internal+ Data.IP.RouteTable+ Data.IP.RouteTable.Internal++ other-modules:+ Data.IP.Addr+ Data.IP.Mask+ Data.IP.Op+ Data.IP.Range++ default-language: Haskell2010+ ghc-options: -Wall+ build-depends:+ base >=4.9 && <5,+ appar,+ byteorder,+ bytestring,+ containers,+ network++ if impl(ghc <8.0)+ build-depends: semigroups >=0.17++ if impl(ghc >=8)+ default-extensions: Strict StrictData++test-suite spec+ type: exitcode-stdio-1.0+ main-is: Spec.hs+ build-tool-depends: hspec-discover:hspec-discover+ hs-source-dirs: test+ other-modules:+ RouteTableSpec+ BuilderSpec+ IPSpec++ default-language: Haskell2010+ ghc-options: -Wall+ build-depends:+ base >=4.6 && <5,+ hspec,+ QuickCheck,+ appar,+ byteorder,+ bytestring,+ containers,+ network,+ safe,+ iproute++ if impl(ghc <8.0)+ build-depends: semigroups >=0.17
test/IPSpec.hs view
@@ -23,7 +23,13 @@ data InvalidIPv4Str = Iv4 String deriving (Show) instance Arbitrary InvalidIPv4Str where- arbitrary = arbitraryIIPv4Str arbitrary 32+ arbitrary = + frequency [(9, arbitraryIIPv4Str arbitrary 32)+ ,(1, Iv4 . (++ ".") . show <$> genIPv4)+ ]+ where+ genIPv4 :: Gen IPv4+ genIPv4 = arbitrary arbitraryIIPv4Str :: Gen IPv4 -> Int -> Gen InvalidIPv4Str arbitraryIIPv4Str adrGen msklen = toIv4 <$> adrGen <*> lenGen
− test/doctests.hs
@@ -1,11 +0,0 @@-module Main where--import Test.DocTest--main :: IO ()-main = doctest [ "-XOverloadedStrings"- , "-package=appar"- , "-package=byteorder"- , "-package=network"- , "Data/IP.hs"- , "Data/IP/RouteTable.hs"]