示例#1
0
    def __init__(self,
                 ls_age=0,
                 options=0,
                 type_=OSPF_UNKNOWN_LSA,
                 id_='0.0.0.0',
                 adv_router='0.0.0.0',
                 ls_seqnum=0,
                 checksum=0,
                 length=0,
                 opaque_type=OSPF_OPAQUE_TYPE_UNKNOWN,
                 opaque_id=0):
        if type_ < OSPF_OPAQUE_LINK_LSA:
            self.header = LSAHeader(ls_age, options, type_, id_, adv_router,
                                    ls_seqnum, 0, 0)
        else:
            self.header = LSAHeader(ls_age, options, type_, 0, adv_router,
                                    ls_seqnum, 0, 0, opaque_type, opaque_id)

        if not (checksum or length):
            tail = self.serialize_tail()
            length = self.header._HDR_LEN + len(tail)
        if not checksum:
            head = self.header.serialize()
            checksum = packet_utils.fletcher_checksum(head[2:], 14)
        self.header.length = length
        self.header.checksum = checksum
示例#2
0
文件: ospf.py 项目: Huangmachi/ryu
    def __init__(self, ls_age=0, options=0, type_=OSPF_UNKNOWN_LSA,
                 id_='0.0.0.0', adv_router='0.0.0.0', ls_seqnum=0,
                 checksum=0, length=0, opaque_type=OSPF_OPAQUE_TYPE_UNKNOWN,
                 opaque_id=0):
        if type_ < OSPF_OPAQUE_LINK_LSA:
            self.header = LSAHeader(
                ls_age=ls_age,
                options=options,
                type_=type_,
                id_=id_,
                adv_router=adv_router,
                ls_seqnum=ls_seqnum)
        else:
            self.header = LSAHeader(
                ls_age=ls_age,
                options=options,
                type_=type_,
                adv_router=adv_router,
                ls_seqnum=ls_seqnum,
                opaque_type=opaque_type,
                opaque_id=opaque_id)

        if not (checksum or length):
            tail = self.serialize_tail()
            length = self.header._HDR_LEN + len(tail)
        if not checksum:
            head = self.header.serialize()
            checksum = packet_utils.fletcher_checksum(head[2:], 14)
        self.header.length = length
        self.header.checksum = checksum
示例#3
0
文件: ospf.py 项目: Aries-Sushi/ryu
 def serialize(self):
     tail = self.serialize_tail()
     self.header.length = self.header._HDR_LEN + len(tail)
     head = self.header.serialize()
     # exclude ls_age for checksum calculation
     csum = packet_utils.fletcher_checksum(head[2:] + tail, 14)
     self.header.checksum = csum
     struct.pack_into("!H", head, 16, csum)
     return head + tail
示例#4
0
 def serialize(self):
     tail = self.serialize_tail()
     self.header.length = self.header._HDR_LEN + len(tail)
     head = self.header.serialize()
     # exclude ls_age for checksum calculation
     csum = packet_utils.fletcher_checksum(head[2:] + tail, 14)
     self.header.checksum = csum
     struct.pack_into("!H", head, 16, csum)
     return head + tail
示例#5
0
 def parser(cls, buf):
     hdr, rest = LSAHeader.parser(buf)
     #exclude ls_age for checksum calculation
     csum = packet_utils.fletcher_checksum(buf[2:hdr['length']], 14)
     if csum != hdr['checksum']:
         raise InvalidChecksum("header has %d, but calculated value is %d"
                               % (hdr['checksum'], csum))
     subcls = cls._lookup_type(hdr['type_'])
     body = rest[:hdr['length']-LSAHeader._HDR_LEN]
     rest = rest[hdr['length']-LSAHeader._HDR_LEN:]
     kwargs = subcls.parser(body)
     kwargs.update(hdr)
     return subcls(**kwargs), subcls, rest
示例#6
0
 def __init__(self, ls_age=0, options=0, type_=OSPF_UNKNOWN_LSA,
              id_='0.0.0.0', adv_router='0.0.0.0', ls_seqnum=0,
              checksum=None, length=None):
     self.header = LSAHeader(ls_age, options, type_, id_, adv_router,
                             ls_seqnum, 0, 0)
     if not (checksum or length):
         tail = self.serialize_tail()
         length = self.header._HDR_LEN + len(tail)
     if not checksum:
         head = self.header.serialize()
         checksum = packet_utils.fletcher_checksum(head[2:], 14)
     self.header.length = length
     self.header.checksum = checksum
示例#7
0
 def parser(cls, buf):
     hdr, rest = LSAHeader.parser(buf)
     if len(buf) < hdr["length"]:
         raise stream_parser.StreamParser.TooSmallException("%d < %d" % (len(buf), hdr["length"]))
     # exclude ls_age for checksum calculation
     csum = packet_utils.fletcher_checksum(buf[2 : hdr["length"]], 14)
     if csum != hdr["checksum"]:
         raise InvalidChecksum("header has %d, but calculated value is %d" % (hdr["checksum"], csum))
     subcls = cls._lookup_type(hdr["type_"])
     body = rest[: hdr["length"] - LSAHeader._HDR_LEN]
     rest = rest[hdr["length"] - LSAHeader._HDR_LEN :]
     if issubclass(subcls, OpaqueLSA):
         kwargs = subcls.parser(body, hdr["opaque_type"])
     else:
         kwargs = subcls.parser(body)
     kwargs.update(hdr)
     return subcls(**kwargs), subcls, rest
示例#8
0
 def parser(cls, buf):
     hdr, rest = LSAHeader.parser(buf)
     if len(buf) < hdr['length']:
         raise stream_parser.StreamParser.TooSmallException(
             '%d < %d' % (len(buf), hdr['length']))
     # exclude ls_age for checksum calculation
     csum = packet_utils.fletcher_checksum(buf[2:hdr['length']], 14)
     if csum != hdr['checksum']:
         raise InvalidChecksum("header has %d, but calculated value is %d" %
                               (hdr['checksum'], csum))
     subcls = cls._lookup_type(hdr['type_'])
     body = rest[:hdr['length'] - LSAHeader._HDR_LEN]
     rest = rest[hdr['length'] - LSAHeader._HDR_LEN:]
     if issubclass(subcls, OpaqueLSA):
         kwargs = subcls.parser(body, hdr['opaque_type'])
     else:
         kwargs = subcls.parser(body)
     kwargs.update(hdr)
     return subcls(**kwargs), subcls, rest