diff --git a/flowspec/junos.py b/flowspec/junos.py index 3d50e98ade60b6d83d60414be014507459e8d76e..6affc59de48e28fe4f03ca37d098b31b2d966992 100644 --- a/flowspec/junos.py +++ b/flowspec/junos.py @@ -192,8 +192,8 @@ def translate_ports(portstr): import os def get_ports(rule): - os.write(2, "rule.port="+str(rule.port)) - os.write(2, str(type(rule.port))) + #os.write(2, "rule.port="+str(rule.port)) + #os.write(2, str(type(rule.port))) if rule.port: #result = 'port'+translate_ports(rule.port.all()) result = 'port'+translate_ports(rule.port) @@ -207,6 +207,29 @@ def get_ports(rule): result += 'srcport' + translate_ports(rule.sourceport) return result +def translate_frag(fragment_string): #TODO get number mapping right, order matters! + if fragment_string == "dont-fragment": + result=":01"; + elif fragment_string == "first-fragment": + result=":04"; + elif fragment_string == "is-fragment": + result=":02"; + elif fragment_string == "last-fragment": + result=":08"; + elif fragment_string == "not-a-fragment": + result="!:02"; + else: + result=":00" # TODO + return result + +def translate_frag_list(frag_list): + result = ",".join([translate_frag(frag) for frag in frag_list]) # needs to be sorted + +def get_frag(rule): + result='' + if rule.fragmenttype: + result = ',frag'+translate_frag_list(rule.fragmenttype.all()) + return result def create_junos_name(rule): name = '' @@ -218,7 +241,8 @@ def create_junos_name(rule): name += get_protocols_numbers(rule.protocol.all()) # ports name += get_ports(rule) - frag = '' + #frag = '' + frag = get_frag(rule) name += frag if name[-1] == ',': name = name[:-1]