55
55
def execute(*command, return_stdout=False):
56
56
devnull = open(os.devnull, 'w')
57
command = map(str, command)
57
58
proc = subprocess.Popen(command, close_fds=True,
58
59
stdout=subprocess.PIPE, stderr=devnull)
71
72
iptables = lambda *rule: execute('/sbin/iptables', *rule)
73
74
iptables('-D', 'FORWARD', '-m', 'physdev',
74
'--physdev-in', '%(VIF)s' % params,
75
'-s', '%(IP)s' % params,
75
'--physdev-in', params['VIF'],
77
78
if command == 'online':
78
79
iptables('-A', 'FORWARD', '-m', 'physdev',
79
'--physdev-in', '%(VIF)s' % params,
80
'-s', '%(IP)s' % params,
80
'--physdev-in', params['VIF'],
85
86
arptables = lambda *rule: execute('/sbin/arptables', *rule)
87
88
arptables('-D', 'FORWARD', '--opcode', 'Request',
88
'--in-interface', '%(VIF)s' % params,
89
'--source-ip', '%(IP)s' % params,
90
'--source-mac', '%(MAC)s' % params,
89
'--in-interface', params['VIF'],
90
'--source-ip', params['IP'],
91
'--source-mac', params['MAC'],
92
93
arptables('-D', 'FORWARD', '--opcode', 'Reply',
93
'--in-interface', '%(VIF)s' % params,
94
'--source-ip', '%(IP)s' % params,
95
'--source-mac', '%(MAC)s' % params,
94
'--in-interface', params['VIF'],
95
'--source-ip', params['IP'],
96
'--source-mac', params['MAC'],
97
98
if command == 'online':
98
99
arptables('-A', 'FORWARD', '--opcode', 'Request',
99
'--in-interface', '%(VIF)s' % params
100
'--source-ip', '%(IP)s' % params,
101
'--source-mac', '%(MAC)s' % params,
100
'--in-interface', params['VIF'],
101
'--source-mac', params['MAC'],
103
103
arptables('-A', 'FORWARD', '--opcode', 'Reply',
104
'--in-interface', '%(VIF)s' % params,
105
'--source-ip', '%(IP)s' % params,
106
'--source-mac', '%(MAC)s' % params,
104
'--in-interface', params['VIF'],
105
'--source-ip', params['IP'],
106
'--source-mac', params['MAC'],
130
130
'-i', params['VIF'], '-j', 'DROP')
131
131
if command == 'online':
132
132
ebtables('-I', 'FORWARD', '1', '-s', '!', params['MAC'],
133
'-i', '%(VIF)s', '-j', 'DROP')
133
'-i', params['VIF'], '-j', 'DROP')
136
136
if __name__ == "__main__":