mark tcp traffic based on port number

Signed-off-by: Benjamin Hesmans <benjamin.hesmans@uclouvain.be>
This commit is contained in:
Benjamin Hesmans 2015-01-12 14:11:14 +01:00
parent 07cd7cacd3
commit 519a8aab0c

View File

@ -14,12 +14,17 @@ class MpECMPSingleInterfaceConfig(MpConfig):
def configureRoute(self): def configureRoute(self):
i = 0 i = 0
mask = len(self.topo.routers) - 1
for l in self.topo.routers: for l in self.topo.routers:
##todo calculate mask length cmd = self.getIptableRuleICMP(mask, i)
cmd = self.getIptableRuleICMP(3, i)
self.topo.commandTo(self.client, cmd) self.topo.commandTo(self.client, cmd)
self.topo.commandTo(self.server, cmd) self.topo.commandTo(self.server, cmd)
cmd = self.getIptableRuleTCPPortClient(mask, i)
self.topo.commandTo(self.client, cmd)
cmd = self.getIptableRuleTCPPortServer(mask, i)
self.topo.commandTo(self.server, cmd)
cmd = self.getIpRuleCmd(i) cmd = self.getIpRuleCmd(i)
self.topo.commandTo(self.client, cmd) self.topo.commandTo(self.client, cmd)
self.topo.commandTo(self.server, cmd) self.topo.commandTo(self.server, cmd)
@ -43,16 +48,35 @@ class MpECMPSingleInterfaceConfig(MpConfig):
self.topo.commandTo(self.client, "ip route flush cache") self.topo.commandTo(self.client, "ip route flush cache")
self.topo.commandTo(self.server, "ip route flush cache") self.topo.commandTo(self.server, "ip route flush cache")
def getIptableRuleICMP(self, maskLen, id): def getIptableRuleICMP(self, mask, id):
s = 'iptables -t mangle -A OUTPUT -m u32 --u32 ' + \ s = 'iptables -t mangle -A OUTPUT -m u32 --u32 ' + \
'"6&0xFF=0x1 && ' + \ '"6&0xFF=0x1 && ' + \
'24&0x' + \ '24&0x' + \
pack('>I',(maskLen)).encode('hex') + \ pack('>I',(mask)).encode('hex') + \
'=0x' + pack('>I',id).encode('hex') + \ '=0x' + pack('>I',id).encode('hex') + \
'" -j MARK --set-mark ' + str(id + 1) '" -j MARK --set-mark ' + str(id + 1)
print (s) print (s)
return s return s
def getIptableRuleTCPPortClient(self, mask, id):
s = 'iptables -t mangle -A OUTPUT -m u32 --u32 ' + \
'"6&0xFF=0x6 && ' + \
'20&0x' + \
pack('>I',(mask<<16)).encode('hex') + \
'=0x' + pack('>I',id).encode('hex') + \
'" -j MARK --set-mark ' + str(id + 1)
print (s)
return s
def getIptableRuleTCPPortServer(self, mask, id):
s = 'iptables -t mangle -A OUTPUT -m u32 --u32 ' + \
'"6&0xFF=0x6 && ' + \
'20&0x' + \
pack('>I',(mask)).encode('hex') + \
'=0x' + pack('>I',id).encode('hex') + \
'" -j MARK --set-mark ' + str(id + 1)
print (s)
return s
def getIpRuleCmd(self, id): def getIpRuleCmd(self, id):
s = 'ip rule add fwmark ' + str(id + 1) + ' table ' + \ s = 'ip rule add fwmark ' + str(id + 1) + ' table ' + \