Commit 0f8b3c5c authored by Binh Nguyen's avatar Binh Nguyen

Listener parsed OSPFv3 Update, DB desc, ACK msg

parent fd2fccd1
OSPFv3 Monitor.
-----------------------------------------------------------------
This program listens to OSPFv3 messages and obtain LSA information to monitor topology changes.
-----------------------------------------------------------------
This program is built based on the Pyrt code (https://github.com/mor1/pyrt.git), with the extra support for OSPFv3.
## PyRT: Python Routeing Toolkit
## OSPFv3 monitor
## mutils: various miscellaneous functions for dealing with IP
## addresses, prefixes, etc.
## Copyright (C) 2001 Richard Mortier <mort@sprintlabs.com>, Sprint ATL
## Copyright (C) 2017 Binh Nguyen <binh@cs.utah.edu>, University of Utah
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License as
......@@ -243,7 +243,7 @@ def int2bin(int):
ret = "" ; bit = 0
while int != 0:
if bit % 8 == 0: ret = '.' + ret
ret = `int%2` + ret
ret = ("%s" % (int % 2)) + ret
int = int >> 1
bit += 1
......@@ -272,6 +272,10 @@ def int2hex(i):
def str2ipv6(s):
return ipaddress.IPv6Address(s)
def int2ipv6(i1, i2, i3, i4):
s = u"%02X:%04X:%04X:%04X:%02X:%02X:%02X:%02X" % ((i1&(0XFFFF<<(8*2)))>>(8*2), i1&0XFFFF, (i2&(0XFFFF<<(8*2)))>>(8*2), i2&0XFFFF, (i3&(0XFFFF<<(8*2)))>>(8*2), i3&0XFFFF, (i4&(0XFFFF<<(8*2)))>>(8*2), i4&0XFFFF)
return ipaddress.IPv6Address(s)
################################################################################
################################################################################
......@@ -57,6 +57,8 @@ class HelloV3(dpkt.Packet):
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Instance ID | 0X00 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Interface ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Router Prio | Options |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| HelloInterval | Router Dead Interval |
......@@ -65,13 +67,14 @@ class HelloV3(dpkt.Packet):
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Backup Designated Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor |
| Neighbor ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
"""
__hdr__ = (
('interfaceid', 'I', 0),
('routerpriority', 'B', 0),
('options', '3s', 10),
('hellointerval', 'H', 0),
......@@ -324,6 +327,41 @@ class LinkLSAV3(dpkt.Packet):
)
class IntraPrefixLSAV3(dpkt.Packet):
"""
Intra Prefix LSA v3 Structure
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Num of prefixes | Referenced LS type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Referenced LS ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Referenced Adv Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Prefix len | Prefix opt | Metric |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Prefix |
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Prefix len | Prefix opt | Metric |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Prefix |
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
"""
__hdr__ = (
('routerpriority', 'B', 0),
('options', '3s', 0),
('linklocalprefix', 'LLLL', 0),
('numofprefix', 'L', 0),
)
class Hello(dpkt.Packet):
......
This diff is collapsed.
# !/usr/bin/env python
import sys, select
sys.path.insert(0, '/users/binh/sripv6-linux/ospf_monitor/lib')
from ospfv3 import *
def consume_ospf(ospf):
# !/usr/bin/env python
import sys, select
sys.path.insert(0, '/users/binh/ospf_monitor/lib')
sys.path.insert(0, '/users/binh/sripv6-linux/ospf_monitor/lib')
from ospfv3 import *
if __name__ == "__main__":
......@@ -10,7 +10,7 @@ if __name__ == "__main__":
global VERBOSE, DUMP_MRTD, ADDRESS
VERBOSE = 3
VERBOSE = 1
DUMP_MRTD = 0
ADDRESS = "::"
......@@ -28,8 +28,9 @@ if __name__ == "__main__":
#rfds, _, _ = select.select([ospf._sock], [], [], timeout)
rv = ospf.parseMsg(VERBOSE, 0)
if rv:
print rv["T"]
#consume_ospf(rv)
#if rv:
# print rv["T"]
#if len(rfds) > 0:
# print "receive OSPF"
# rv = ospf.parseMsg(VERBOSE, 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment