Exemple #1
0
    def test_nlri(self):
        components = {
            'destination': Flow4Destination(IPv4.pton("192.0.2.0"), 24),
            'source': Flow4Source(IPv4.pton("10.1.2.0"), 24),
            'anyport_1': FlowAnyPort(NumericOperator.EQ | NumericOperator.GT,
                                     25),
            'anyport_2': FlowAnyPort(NumericOperator.EQ | NumericOperator.LT,
                                     80),
        }
        messages = {
            'destination': [0x01, 0x18, 0xC0, 0x00, 0x02],
            'source': [0x02, 0x18, 0x0A, 0x01, 0x02],
            'anyport_1': [0x04, 0x43, 0x19],
            'anyport_2': [0x85, 0x50],
        }

        flow = Flow()
        message = b""
        for key in ['destination', 'source', 'anyport_1', 'anyport_2']:
            flow.add(components[key])
            message += bytes(messages[key])
        message = bytes([len(message)]) + message
        # policy.add(to_FlowAction(65000,False,False))
        flow = flow.pack()
        if message[0] != flow[0]:
            self.fail('size mismatch %s %s\n' % (flow[0], message[0]))
        if len(flow) != flow[0] + 1:
            self.fail('invalid size for message')
Exemple #2
0
	def test_nlri (self):
		components = {
			'destination': Flow4Destination("192.0.2.0",24),
			'source':      Flow4Source("10.1.2.0",24),
			'anyport_1':   FlowAnyPort(NumericOperator.EQ | NumericOperator.GT,25),
			'anyport_2':   FlowAnyPort(NumericOperator.EQ | NumericOperator.LT,80),
		}
		messages = {
			'destination': [0x01, 0x18, 0xc0, 0x00, 0x02],
			'source':      [0x02, 0x18, 0x0a, 0x01, 0x02],
			'anyport_1':   [0x04, 0x43, 0x19],
			'anyport_2':   [0x85, 0x50],
		}

		flow = Flow()
		message = ""
		for key in ['destination','source','anyport_1','anyport_2']:
			flow.add(components[key])
			message += ''.join([chr(_) for _ in messages[key]])
		message = chr(len(message)) + message
		# policy.add(to_FlowAction(65000,False,False))
		flow = flow.pack()
		if message[0] != flow[0]:
			self.fail('size mismatch %s %s\n' % (ord(flow[0]),ord(message[0])))
		if len(flow) != ord(flow[0]) + 1:
			self.fail('invalid size for message')
Exemple #3
0
def route(tokeniser):
    change = Change(Flow(), Attributes())

    while True:
        command = tokeniser()

        if not command:
            break

        action = ParseFlow.action[command]

        if action == 'nlri-add':
            for adding in ParseFlow.known[command](tokeniser):
                change.nlri.add(adding)
        elif action == 'attribute-add':
            change.attributes.add(ParseFlow.known[command](tokeniser))
        elif action == 'nexthop-and-attribute':
            nexthop, attribute = ParseFlow.known[command](tokeniser)
            change.nlri.nexthop = nexthop
            change.attributes.add(attribute)
        elif action == 'nop':
            pass  # yes nothing to do !
        else:
            raise ValueError('flow: unknown command "%s"' % command)

    return [change]
Exemple #4
0
    def test_compare(self):
        components = {
            'destination': Flow4Destination(IPv4.pton("192.0.2.0"), 24),
            'source': Flow4Source(IPv4.pton("10.1.2.0"), 24),
            'anyport_1': FlowAnyPort(NumericOperator.EQ | NumericOperator.GT, 25),
            'anyport_2': FlowAnyPort(NumericOperator.EQ | NumericOperator.LT, 80),
            'anyport_3': FlowAnyPort(NumericOperator.EQ, 80),
        }

        flow1 = Flow()
        for key in ['destination', 'source', 'anyport_1', 'anyport_2']:
            flow1.add(components[key])

        flow2 = Flow()
        for key in ['destination', 'source', 'anyport_3']:
            flow2.add(components[key])

        if flow1 != flow1:
            self.fail('the flows are the same')

        if flow1 == flow2:
            self.fail('the flows are not the same')
Exemple #5
0
    def test_rule_and(self):
        components = {
            'destination': Flow4Destination(IPv4.pton("192.0.2.0"), 24),
            'source': Flow4Source(IPv4.pton("10.1.2.0"), 24),
            'anyport_1': FlowAnyPort(NumericOperator.EQ | NumericOperator.GT, 25),
            'anyport_2': FlowAnyPort(NumericOperator.EQ | NumericOperator.LT, 80),
        }
        messages = {
            'destination': [0x01, 0x18, 0xC0, 0x00, 0x02],
            'source': [0x02, 0x18, 0x0A, 0x01, 0x02],
            'anyport_1': [0x04, 0x43, 0x19],
            'anyport_2': [0x04, 0x85, 0x50],
        }

        flow = Flow()
        message = b""
        for key in ['destination', 'source', 'anyport_1', 'anyport_2']:
            flow.add(components[key])
            message += bytes(messages[key])
        message = bytes([len(message)]) + message
        # flow.add(to_FlowAction(65000,False,False))
        flow.pack()
Exemple #6
0
	def test_compare (self):
		components = {
			'destination': Flow4Destination("192.0.2.0",24),
			'source':      Flow4Source("10.1.2.0",24),
			'anyport_1':   FlowAnyPort(NumericOperator.EQ | NumericOperator.GT,25),
			'anyport_2':   FlowAnyPort(NumericOperator.EQ | NumericOperator.LT,80),
			'anyport_3':   FlowAnyPort(NumericOperator.EQ,80),
		}

		flow1 = Flow()
		for key in ['destination','source','anyport_1','anyport_2']:
			flow1.add(components[key])

		flow2 = Flow()
		for key in ['destination','source','anyport_3']:
			flow2.add(components[key])

		if flow1 != flow1:
			self.fail('the flows are the same')

		if flow1 == flow2:
			self.fail('the flows are not the same')
Exemple #7
0
	def test_rule_and (self):
		components = {
			'destination': Flow4Destination("192.0.2.0",24),
			'source':      Flow4Source("10.1.2.0",24),
			'anyport_1':   FlowAnyPort(NumericOperator.EQ | NumericOperator.GT,25),
			'anyport_2':   FlowAnyPort(NumericOperator.EQ | NumericOperator.LT,80),
		}
		messages = {
			'destination': [0x01, 0x18, 0xc0, 0x00, 0x02],
			'source':      [0x02, 0x18, 0x0a, 0x01, 0x02],
			'anyport_1':   [0x04, 0x43, 0x19],
			'anyport_2':   [0x04, 0x85, 0x50],
		}

		flow = Flow()
		message = ""
		for key in ['destination','source','anyport_1','anyport_2']:
			flow.add(components[key])
			message += ''.join([chr(_) for _ in messages[key]])
		message = chr(len(message)) + message
		# flow.add(to_FlowAction(65000,False,False))
		flow.pack()
Exemple #8
0
def flow(tokeniser):
    return Change(Flow(), Attributes())