summaryrefslogtreecommitdiffstats
path: root/scripts/external_libs/dpkt-1.8.6/dpkt/ntp.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/external_libs/dpkt-1.8.6/dpkt/ntp.py')
-rw-r--r--scripts/external_libs/dpkt-1.8.6/dpkt/ntp.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ntp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ntp.py
new file mode 100644
index 00000000..7012af2a
--- /dev/null
+++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ntp.py
@@ -0,0 +1,83 @@
+# $Id: ntp.py 48 2008-05-27 17:31:15Z yardley $
+
+"""Network Time Protocol."""
+
+import dpkt
+
+# NTP v4
+
+# Leap Indicator (LI) Codes
+NO_WARNING = 0
+LAST_MINUTE_61_SECONDS = 1
+LAST_MINUTE_59_SECONDS = 2
+ALARM_CONDITION = 3
+
+# Mode Codes
+RESERVED = 0
+SYMMETRIC_ACTIVE = 1
+SYMMETRIC_PASSIVE = 2
+CLIENT = 3
+SERVER = 4
+BROADCAST = 5
+CONTROL_MESSAGE = 6
+PRIVATE = 7
+
+class NTP(dpkt.Packet):
+ __hdr__ = (
+ ('flags', 'B', 0),
+ ('stratum', 'B', 0),
+ ('interval', 'B', 0),
+ ('precision', 'B', 0),
+ ('delay', 'I', 0),
+ ('dispersion', 'I', 0),
+ ('id', '4s', 0),
+ ('update_time', '8s', 0),
+ ('originate_time', '8s', 0),
+ ('receive_time', '8s', 0),
+ ('transmit_time', '8s', 0)
+ )
+
+ def _get_v(self):
+ return (self.flags >> 3) & 0x7
+ def _set_v(self, v):
+ self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3)
+ v = property(_get_v, _set_v)
+
+ def _get_li(self):
+ return (self.flags >> 6) & 0x3
+ def _set_li(self, li):
+ self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6)
+ li = property(_get_li, _set_li)
+
+ def _get_mode(self):
+ return (self.flags & 0x7)
+ def _set_mode(self, mode):
+ self.flags = (self.flags & ~0x7) | (mode & 0x7)
+ mode = property(_get_mode, _set_mode)
+
+if __name__ == '__main__':
+ import unittest
+
+ class NTPTestCase(unittest.TestCase):
+ def testPack(self):
+ n = NTP(self.s)
+ self.failUnless(self.s == str(n))
+
+ def testUnpack(self):
+ n = NTP(self.s)
+ self.failUnless(n.li == NO_WARNING)
+ self.failUnless(n.v == 4)
+ self.failUnless(n.mode == SERVER)
+ self.failUnless(n.stratum == 2)
+ self.failUnless(n.id == '\xc1\x02\x04\x02')
+
+ # test get/set functions
+ n.li = ALARM_CONDITION
+ n.v = 3
+ n.mode = CLIENT
+ self.failUnless(n.li == ALARM_CONDITION)
+ self.failUnless(n.v == 3)
+ self.failUnless(n.mode == CLIENT)
+
+ s = '\x24\x02\x04\xef\x00\x00\x00\x84\x00\x00\x33\x27\xc1\x02\x04\x02\xc8\x90\xec\x11\x22\xae\x07\xe5\xc8\x90\xf9\xd9\xc0\x7e\x8c\xcd\xc8\x90\xf9\xd9\xda\xc5\xb0\x78\xc8\x90\xf9\xd9\xda\xc6\x8a\x93'
+ unittest.main()