Exemplo n.º 1
0
def as_path(tokeniser):
    as_seq = []
    as_set = []
    value = tokeniser()
    inset = False
    try:
        if value == '[':
            while True:
                value = tokeniser()
                if value == ',':
                    continue
                if value in ('(', '['):
                    inset = True
                    while True:
                        value = tokeniser()
                        if value in (')', ']'):
                            break
                        as_set.append(ASN.from_string(value))
                if value == ')':
                    inset = False
                    continue
                if value == ']':
                    if inset:
                        inset = False
                        continue
                    break
                as_seq.append(ASN.from_string(value))
        else:
            as_seq.append(ASN.from_string(value))
    except ValueError:
        raise ValueError('could not parse as-path')
    return ASPath(as_seq, as_set)
Exemplo n.º 2
0
def as_path (tokeniser):
	as_seq = []
	as_set = []
	value = tokeniser()
	inset = False
	try:
		if value == '[':
			while True:
				value = tokeniser()
				if value == ',':
					continue
				if value in ('(','['):
					inset = True
					while True:
						value = tokeniser()
						if value == ')':
							break
						as_set.append(ASN.from_string(value))
				if value == ')':
					inset = False
					continue
				if value == ']':
					if inset:
						inset = False
						continue
					break
				as_seq.append(ASN.from_string(value))
		else:
			as_seq.append(ASN.from_string(value))
	except ValueError:
		raise ValueError('could not parse as-path')
	return ASPath(as_seq,as_set)
Exemplo n.º 3
0
def as_path(tokeniser):
    as_seq = []
    as_set = []
    value = tokeniser()
    inset = False
    try:
        if value == "[":
            while True:
                value = tokeniser()
                if value == ",":
                    continue
                if value in ("(", "["):
                    inset = True
                    while True:
                        value = tokeniser()
                        if value == ")":
                            break
                        as_set.append(ASN.from_string(value))
                if value == ")":
                    inset = False
                    continue
                if value == "]":
                    if inset:
                        inset = False
                        continue
                    break
                as_seq.append(ASN.from_string(value))
        else:
            as_seq.append(ASN.from_string(value))
    except ValueError:
        raise ValueError("could not parse as-path")
    return ASPath(as_seq, as_set)
Exemplo n.º 4
0
def as_path(tokeniser):
    as_path = []
    insert = None

    while True:
        value = tokeniser()

        if value == '[':
            value = tokeniser.peek()

            if value != '{':
                insert = SEQUENCE()
            else:
                insert = CONFED_SEQUENCE()

        elif value == '(':
            value = tokeniser.peek()

            if value != '{':
                insert = SET()
            else:
                insert = CONFED_SET()

        elif len(as_path) == 0:
            try:
                return ASPath(ASN.from_string(value))
            except ValueError:
                raise ValueError('could not parse as-path')
        else:
            raise ValueError('could not parse as-path')

        while True:
            value = tokeniser()

            # could be too nice eating a trailing and ignore a erroneous },,
            # but simpler that way
            if value in (',', '}'):
                continue

            if value in (')', ']'):
                as_path.append(insert)

                value = tokeniser.peek()
                if value in ('[', '('):
                    break

                return ASPath(as_path)

            try:
                insert.append(ASN.from_string(value))
                continue
            except ValueError:
                raise ValueError('could not parse as-path')
Exemplo n.º 5
0
def aggregator(tokeniser):
    eat = True if tokeniser.tokens[0] == "(" else False

    if eat:
        tokeniser()

    value = tokeniser()
    if value != "(":
        tokeniser.rewind(value)
        return None

    try:
        as_number, address = tokeniser().split(":")
        local_as = ASN.from_string(as_number)
        local_address = RouterID(address)
    except (ValueError, IndexError):
        raise ValueError("invalid aggregator")

    if eat:
        value = tokeniser()
        if value != ")":
            raise ValueError("invalid aggregator")

            # XXX: This is buggy it can be an Aggregator4
    return Aggregator(local_as, local_address)
Exemplo n.º 6
0
def aggregator(tokeniser):
    agg = tokeniser()
    eat = True if agg == '(' else False

    if eat:
        agg = tokeniser()
        if agg.endswith(')'):
            eat = False
            agg = agg[:-1]
    elif agg.startswith('('):
        if agg.endswith(')'):
            eat = False
            agg = agg[1:-1]
        else:
            eat = True
            agg = agg[1:]

    try:
        as_number, address = agg.split(':')
        local_as = ASN.from_string(as_number)
        local_address = RouterID(address)
    except (ValueError, IndexError):
        raise ValueError('invalid aggregator')

    if eat:
        if tokeniser() != ')':
            raise ValueError('invalid aggregator')

    return Aggregator(local_as, local_address)
Exemplo n.º 7
0
def aggregator(tokeniser):
    eat = True if tokeniser.tokens[0] == '(' else False

    if eat:
        tokeniser()

    value = tokeniser()
    if value != '(':
        tokeniser.rewind(value)
        return None

    try:
        as_number, address = tokeniser().split(':')
        local_as = ASN.from_string(as_number)
        local_address = RouterID(address)
    except (ValueError, IndexError):
        raise ValueError('invalid aggregator')

    if eat:
        value = tokeniser()
        if value != ')':
            raise ValueError('invalid aggregator')

    # XXX: This is buggy it can be an Aggregator4
    return Aggregator(local_as, local_address)
Exemplo n.º 8
0
def aggregator(tokeniser):
    first = tokeniser.peek()
    eat = True if first == '(' else False

    if eat:
        tokeniser()

    try:
        as_number, address = tokeniser().split(':')
        local_as = ASN.from_string(as_number)
        local_address = RouterID(address)
    except (ValueError, IndexError):
        raise ValueError('invalid aggregator')

    if eat:
        if tokeniser() != ')':
            raise ValueError('invalid aggregator')

    return Aggregator(local_as, local_address)
Exemplo n.º 9
0
def aggregator (tokeniser):
	first = tokeniser.peek()
	eat = True if first == '(' else False

	if eat:
		tokeniser()

	try:
		as_number,address = tokeniser().split(':')
		local_as = ASN.from_string(as_number)
		local_address = RouterID(address)
	except (ValueError,IndexError):
		raise ValueError('invalid aggregator')

	if eat:
		if tokeniser() != ')':
			raise ValueError('invalid aggregator')

	return Aggregator(local_as,local_address)
Exemplo n.º 10
0
def aggregator(tokeniser):
    eat = tokeniser.tokens and tokeniser.tokens[0] == '('

    if eat:
        tokeniser()

    try:
        as_number, address = tokeniser().split(':')
        local_as = ASN.from_string(as_number)
        local_address = RouterID(address)
    except (ValueError, IndexError):
        raise ValueError('invalid aggregator')

    if eat:
        if tokeniser() != ')':
            raise ValueError('invalid aggregator')

    # XXX: This could be buggy - check it
    if local_as.asn4():
        return Aggregator4(local_as, local_address)
    return Aggregator(local_as, local_address)
Exemplo n.º 11
0
def aggregator (tokeniser):
	eat = tokeniser.tokens and tokeniser.tokens[0] == '('

	if eat:
		tokeniser()

	try:
		as_number,address = tokeniser().split(':')
		local_as = ASN.from_string(as_number)
		local_address = RouterID(address)
	except (ValueError,IndexError):
		raise ValueError('invalid aggregator')

	if eat:
		if tokeniser() != ')':
			raise ValueError('invalid aggregator')

	# XXX: This could be buggy - check it
	if local_as.asn4():
		return Aggregator4(local_as,local_address)
	return Aggregator(local_as,local_address)