Home | History | Annotate | Download | only in contrib
      1 % EIGRP Tests
      2 * Tests for the Scapy EIGRP layer
      3 
      4 + Basic Layer Tests
      5 * These are just some basic tests
      6 
      7 = EIGRP IPv4 Binding
      8 ~ eigrp_ipv4_binding
      9 p = IP()/EIGRP()
     10 p[IP].proto == 88
     11 
     12 = EIGRP IPv6 Binding
     13 ~ eigrp_ipv6_binding
     14 p = IPv6()/EIGRP()
     15 p[IPv6].nh == 88
     16 
     17 = EIGRP checksum field
     18 ~ eigrp_chksum_field
     19 p = IP()/EIGRP(flags=0xa, seq=23, ack=42, asn=100)
     20 s = p[EIGRP].build()
     21 struct.unpack("!H", s[2:4])[0] == 64843
     22 
     23 + Custom Field Tests
     24 * Test funciontally of custom made fields
     25 
     26 = ShortVersionField nice representation
     27 f = ShortVersionField("ver", 3072)
     28 f.i2repr(None, 3072) == "v12.0" and f.i2repr(None, 258) == "v1.2"
     29 
     30 = ShortVersionField h2i function
     31 f = ShortVersionField("ver", 0)
     32 f.h2i(None, 3073) == f.h2i(None, "v12.1")
     33 
     34 = EigrpIPField length with prefix length of 8 bit
     35 f = EigrpIPField("ipaddr", "192.168.1.0", length=8)
     36 f.i2len(None, "") == 1
     37 
     38 = EigrpIPField length with prefix length of 12 bit
     39 f = EigrpIPField("ipaddr", "192.168.1.0", length=12)
     40 f.i2len(None, "") == 2
     41 
     42 = EigrpIPField length with prefix length of 24 bit
     43 f = EigrpIPField("ipaddr", "192.168.1.0", length=24)
     44 f.i2len(None, "") == 3
     45 
     46 = EigrpIPField length with prefix length of 28 bit
     47 f = EigrpIPField("ipaddr", "192.168.1.0", length=28)
     48 f.i2len(None, "") == 4
     49 
     50 = EigrpIP6Field length with prefix length of 8 bit
     51 f = EigrpIP6Field("ipaddr", "2000::", length=8)
     52 f.i2len(None, "") == 2
     53 
     54 = EigrpIP6Field length with prefix length of 99 bit
     55 f = EigrpIP6Field("ipaddr", "2000::", length=99)
     56 f.i2len(None, "") == 13
     57 
     58 = EigrpIP6Field length with prefix length of 128 bit
     59 f = EigrpIP6Field("ipaddr", "2000::", length=128)
     60 f.i2len(None, "") == 16
     61 
     62 = EIGRPGuessPayloadClass function: Return Parameters TLV
     63 from scapy.contrib.eigrp import _EIGRPGuessPayloadClass
     64 isinstance(_EIGRPGuessPayloadClass(b"\x00\x01"), EIGRPParam)
     65 
     66 = EIGRPGuessPayloadClass function: Return Authentication Data TLV
     67 isinstance(_EIGRPGuessPayloadClass(b"\x00\x02"), EIGRPAuthData)
     68 
     69 = EIGRPGuessPayloadClass function: Return Sequence TLV
     70 isinstance(_EIGRPGuessPayloadClass(b"\x00\x03"), EIGRPSeq)
     71 
     72 = EIGRPGuessPayloadClass function: Return Software Version TLV
     73 isinstance(_EIGRPGuessPayloadClass(b"\x00\x04"), EIGRPSwVer)
     74 
     75 = EIGRPGuessPayloadClass function: Return Next Multicast Sequence TLV
     76 isinstance(_EIGRPGuessPayloadClass(b"\x00\x05"), EIGRPNms)
     77 
     78 = EIGRPGuessPayloadClass function: Return Stub Router TLV
     79 isinstance(_EIGRPGuessPayloadClass(b"\x00\x06"), EIGRPStub)
     80 
     81 = EIGRPGuessPayloadClass function: Return Internal Route TLV
     82 isinstance(_EIGRPGuessPayloadClass(b"\x01\x02"), EIGRPIntRoute)
     83 
     84 = EIGRPGuessPayloadClass function: Return External Route TLV
     85 isinstance(_EIGRPGuessPayloadClass(b"\x01\x03"), EIGRPExtRoute)
     86 
     87 = EIGRPGuessPayloadClass function: Return IPv6 Internal Route TLV
     88 isinstance(_EIGRPGuessPayloadClass(b"\x04\x02"), EIGRPv6IntRoute)
     89 
     90 = EIGRPGuessPayloadClass function: Return IPv6 External Route TLV
     91 isinstance(_EIGRPGuessPayloadClass(b"\x04\x03"), EIGRPv6ExtRoute)
     92 
     93 = EIGRPGuessPayloadClass function: Return EIGRPGeneric
     94 isinstance(_EIGRPGuessPayloadClass(b"\x23\x42"), EIGRPGeneric)
     95 
     96 + TLV List
     97 
     98 = EIGRP parameters and software version
     99 p = IP()/EIGRP(tlvlist=[EIGRPParam()/EIGRPSwVer()])
    100 s = b'\x45\x00\x00\x3C\x00\x01\x00\x00\x40\x58\x7C\x67\x7F\x00\x00\x01\x7F\x00\x00\x01\x02\x05\xEE\x6C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x01\x00\x0C\x01\x00\x01\x00\x00\x00\x00\x0F\x00\x04\x00\x08\x0C\x00\x01\x02'
    101 raw(p) == s
    102 
    103 = EIGRP internal route length field
    104 p = IP()/EIGRP(tlvlist=[EIGRPIntRoute(prefixlen=24, dst="192.168.1.0")])
    105 struct.unpack("!H", p[EIGRPIntRoute].build()[2:4])[0] == 28
    106 
    107 = EIGRP external route length field
    108 p = IP()/EIGRP(tlvlist=[EIGRPExtRoute(prefixlen=16, dst="10.1.0.0")])
    109 struct.unpack("!H", p[EIGRPExtRoute].build()[2:4])[0] == 47
    110 
    111 = EIGRPv6 internal route length field
    112 p = IP()/EIGRP(tlvlist=[EIGRPv6IntRoute(prefixlen=64, dst="2000::")])
    113 struct.unpack("!H", p[EIGRPv6IntRoute].build()[2:4])[0] == 46
    114 
    115 = EIGRPv6 external route length field
    116 p = IP()/EIGRP(tlvlist=[EIGRPv6ExtRoute(prefixlen=99, dst="2000::")])
    117 struct.unpack("!H", p[EIGRPv6ExtRoute].build()[2:4])[0] == 70
    118 
    119 + Stub Flags
    120 * The receive-only flag is always set, when a router anounces itself as stub router.
    121 
    122 = Receive-Only
    123 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="receive-only")])
    124 p[EIGRPStub].flags == 0x0008
    125 
    126 = Connected
    127 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="connected+receive-only")])
    128 p[EIGRPStub].flags == 0x0009
    129 
    130 = Static
    131 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="static+receive-only")])
    132 p[EIGRPStub].flags == 0x000a
    133 
    134 = Summary
    135 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="summary+receive-only")])
    136 p[EIGRPStub].flags == 0x000c
    137 
    138 = Connected, Summary
    139 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="connected+summary+receive-only")])
    140 p[EIGRPStub].flags == 0x000d
    141 
    142 = Static, Summary
    143 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="static+summary+receive-only")])
    144 p[EIGRPStub].flags == 0x000e
    145 
    146 = Redistributed, Connected
    147 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="redistributed+connected+receive-only")])
    148 p[EIGRPStub].flags == 0x0019
    149 
    150 = Redistributed, Static
    151 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="redistributed+static+receive-only")])
    152 p[EIGRPStub].flags == 0x001a
    153 
    154 = Redistributed, Static, Connected
    155 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="redistributed+static+connected+receive-only")])
    156 p[EIGRPStub].flags == 0x001b
    157 
    158 = Redistributed, Summary
    159 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="redistributed+summary+receive-only")])
    160 p[EIGRPStub].flags == 0x001c
    161 
    162 = Redistributed, Connected, Summary
    163 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="redistributed+connected+summary+receive-only")])
    164 p[EIGRPStub].flags == 0x001d
    165 
    166 = Connected, Redistributed, Static, Summary
    167 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="connected+redistributed+static+summary+receive-only")])
    168 p[EIGRPStub].flags == 0x001f
    169 
    170 = Leak-Map
    171 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="leak-map+receive-only")])
    172 p[EIGRPStub].flags == 0x0028
    173 
    174 = Connected, Leak-Map
    175 p = IP()/EIGRP(tlvlist=[EIGRPStub(flags="connected+leak-map+receive-only")])
    176 p[EIGRPStub].flags == 0x0029
    177 
    178 + Routing Updates
    179 
    180 = External route flag external
    181 p = EIGRPExtRoute(flags="external")
    182 p.flags == 0x1
    183 
    184 = External route flag candidate-default route
    185 p = EIGRPExtRoute(flags="candidate-default")
    186 p.flags == 0x2
    187 
    188 = Multiple internal routing updates
    189 p = IP()/EIGRP(tlvlist=[EIGRPIntRoute(), EIGRPIntRoute(hopcount=12), EIGRPIntRoute()])
    190 p[EIGRPIntRoute:2].hopcount == 12
    191 
    192 = Multiple external routing updates
    193 p = IP()/EIGRP(tlvlist=[EIGRPExtRoute(), EIGRPExtRoute(mtu=23), EIGRPExtRoute()])
    194 p[EIGRPExtRoute:2].mtu == 23
    195 
    196 + Authentication Data TLV
    197 
    198 = Verify keysize calculation
    199 p = IP()/EIGRP(tlvlist=[EIGRPAuthData(authdata=b"\xaa\xbb\xcc")])
    200 p[EIGRPAuthData].build()[6:8] == b"\x00\x03"
    201 
    202 = Verify length calculation
    203 p = IP()/EIGRP(tlvlist=[EIGRPAuthData(authdata=b"\xaa\xbb\xcc\xdd")])
    204 p[EIGRPAuthData].build()[2:4] == b"\x00\x1c"
    205