Merge lp:~therve/landscape-client/network-interface-flags into lp:~landscape/landscape-client/trunk

Proposed by Thomas Herve
Status: Merged
Approved by: Kevin McDermott
Approved revision: 259
Merged at revision: 255
Proposed branch: lp:~therve/landscape-client/network-interface-flags
Merge into: lp:~landscape/landscape-client/trunk
Diff against target: 93 lines (+32/-4)
4 files modified
landscape/lib/network.py (+14/-0)
landscape/lib/tests/test_network.py (+12/-3)
landscape/message_schemas.py (+2/-1)
landscape/monitor/tests/test_networkdevice.py (+4/-0)
To merge this branch: bzr merge lp:~therve/landscape-client/network-interface-flags
Reviewer Review Type Date Requested Status
Kevin McDermott (community) Approve
Jamu Kakar (community) Approve
Review via email: mp+27236@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jamu Kakar (jkakar) wrote :

Looks good, +1!

review: Approve
Revision history for this message
Kevin McDermott (bigkevmcd) wrote :

Small branches are awesome :-)

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'landscape/lib/network.py'
2--- landscape/lib/network.py 2010-06-10 08:08:44 +0000
3+++ landscape/lib/network.py 2010-06-10 09:09:33 +0000
4@@ -10,6 +10,7 @@
5
6 # from header /usr/include/bits/ioctls.h
7 SIOCGIFCONF = 0x8912
8+SIOCGIFFLAGS = 0x8913
9 SIOCGIFNETMASK = 0x891b
10 SIOCGIFBRDADDR = 0x8919
11 SIOCGIFADDR = 0x8915
12@@ -114,6 +115,18 @@
13 return "".join(["%02x:" % ord(char) for char in mac_address[18:24]])[:-1]
14
15
16+def get_flags(sock, interface):
17+ """Return the integer value of the interface flags for the given interface.
18+
19+ @param sock: a socket instance.
20+ @param interface: The name of the interface.
21+ @see /usr/include/linux/if.h for the meaning of the flags.
22+ """
23+ data = fcntl.ioctl(
24+ sock.fileno(), SIOCGIFFLAGS, struct.pack("256s", interface[:15]))
25+ return struct.unpack("H", data[16:18])[0]
26+
27+
28 def get_active_device_info():
29 """
30 Returns a dictionary containing information on each active network
31@@ -128,6 +141,7 @@
32 interface_info["broadcast_address"] = get_broadcast_address(sock,
33 interface)
34 interface_info["netmask"] = get_netmask(sock, interface)
35+ interface_info["flags"] = get_flags(sock, interface)
36 results.append(interface_info)
37 del sock
38 return results
39
40=== modified file 'landscape/lib/tests/test_network.py'
41--- landscape/lib/tests/test_network.py 2010-06-10 08:08:44 +0000
42+++ landscape/lib/tests/test_network.py 2010-06-10 09:09:33 +0000
43@@ -26,9 +26,18 @@
44 self.assertTrue(device["interface"] in result)
45 block = interface_blocks[device["interface"]]
46 self.assertTrue(device["netmask"] in block)
47- self.failUnlessIn(device["ip_address"], block)
48- self.failUnlessIn(device["mac_address"].upper(), block)
49- self.failUnlessIn(device["broadcast_address"], block)
50+ self.assertIn(device["ip_address"], block)
51+ self.assertIn(device["mac_address"].upper(), block)
52+ self.assertIn(device["broadcast_address"], block)
53+ flags = device["flags"]
54+ if flags & 1:
55+ self.assertIn("UP", block)
56+ if flags & 2:
57+ self.assertIn("BROADCAST", block)
58+ if flags & 64:
59+ self.assertIn("RUNNING", block)
60+ if flags & 4096:
61+ self.assertIn("MULTICAST", block)
62
63 def test_get_network_traffic(self):
64 """
65
66=== modified file 'landscape/message_schemas.py'
67--- landscape/message_schemas.py 2010-05-13 10:29:37 +0000
68+++ landscape/message_schemas.py 2010-06-10 09:09:33 +0000
69@@ -364,7 +364,8 @@
70 "ip_address": String(),
71 "mac_address": String(),
72 "broadcast_address": String(),
73- "netmask": String()}))})
74+ "netmask": String(),
75+ "flags": Int()}))})
76
77 NETWORK_ACTIVITY = Message(
78 "network-activity",
79
80=== modified file 'landscape/monitor/tests/test_networkdevice.py'
81--- landscape/monitor/tests/test_networkdevice.py 2010-05-04 17:23:45 +0000
82+++ landscape/monitor/tests/test_networkdevice.py 2010-06-10 09:09:33 +0000
83@@ -24,6 +24,10 @@
84 self.assertTrue(message["devices"][0]["interface"], "lo")
85 self.assertTrue(message["devices"][0]["ip_address"], "0.0.0.0")
86 self.assertTrue(message["devices"][0]["netmask"], "255.0.0.0")
87+ flags = message["devices"][0]["flags"]
88+ self.assertEqual(1, flags & 1) # UP
89+ self.assertEqual(8, flags & 8) # LOOPBACK
90+ self.assertEqual(64, flags & 64) # RUNNING
91
92 def test_no_message_with_no_changes(self):
93 """If no device changes from the last message, no message is sent."""

Subscribers

People subscribed via source and target branches

to all changes: