Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 24 additions & 31 deletions iptc/ip6tc.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,22 +412,19 @@ def set_dst(self, dst):
def get_in_interface(self):
intf = ""
if self.entry.ipv6.invflags & ip6t_ip6.IP6T_INV_VIA_IN:
intf = "".join(["!", intf])
iface = bytearray(_IFNAMSIZ)
iface[:len(self.entry.ipv6.iniface)] = self.entry.ipv6.iniface
mask = bytearray(_IFNAMSIZ)
mask[:len(self.entry.ipv6.iniface_mask)] = self.entry.ipv6.iniface_mask
if mask[0] == 0:
intf = "!"

iface = self.entry.ipv6.iniface.decode()
mask = self.entry.ipv6.iniface_mask

if len(mask) == 0:
return None
for i in range(_IFNAMSIZ):
if mask[i] != 0:
intf = "".join([intf, chr(iface[i])])
else:
if iface[i - 1] != 0:
intf = "".join([intf, "+"])
else:
intf = intf[:-1]
break

intf += iface
if len(iface) == len(mask):
intf += '+'
intf = intf[:_IFNAMSIZ]

return intf

def set_in_interface(self, intf):
Expand Down Expand Up @@ -456,23 +453,19 @@ def set_in_interface(self, intf):
def get_out_interface(self):
intf = ""
if self.entry.ipv6.invflags & ip6t_ip6.IP6T_INV_VIA_OUT:
intf = "".join(["!", intf])
iface = bytearray(_IFNAMSIZ)
iface[:len(self.entry.ipv6.outiface)] = self.entry.ipv6.outiface
mask = bytearray(_IFNAMSIZ)
mask[:len(self.entry.ipv6.outiface_mask)] = \
self.entry.ipv6.outiface_mask
if mask[0] == 0:
intf = "!"

iface = self.entry.ipv6.outiface.decode()
mask = self.entry.ipv6.outiface_mask

if len(mask) == 0:
return None
for i in range(_IFNAMSIZ):
if mask[i] != 0:
intf = "".join([intf, chr(iface[i])])
else:
if iface[i - 1] != 0:
intf = "".join([intf, "+"])
else:
intf = intf[:-1]
break

intf += iface
if len(iface) == len(mask):
intf += '+'
intf = intf[:_IFNAMSIZ]

return intf

def set_out_interface(self, intf):
Expand Down
4 changes: 3 additions & 1 deletion tests/test_iptc.py
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,9 @@ def test_rule_address(self):
def test_rule_interface(self):
# valid interfaces
rule = iptc.Rule6()
for intf in ["eth0", "eth+", "ip6tnl1", "ip6tnl+", "!ppp0", "!ppp+"]:

max_length_valid_interface_name = "0123456789abcde"
for intf in ["eth0", "eth+", "ip6tnl1", "ip6tnl+", "!ppp0", "!ppp+", max_length_valid_interface_name]:
rule.in_interface = intf
self.assertEquals(intf, rule.in_interface)
rule.out_interface = intf
Expand Down
Loading