コード例 #1
0
ファイル: __init__.py プロジェクト: yegorich/pyroute2
    def encode(self):
        msg.encode(self)
        self._register_options()
        # put message type
        options = self.get('options') or {
            'message_type': DHCPDISCOVER,
            'parameter_list': [1, 3, 6, 12, 15, 28]
        }

        self.buf += self.uint8(code=53,
                               value=options['message_type']).encode().buf
        self.buf += self.client_id({
            'type': 1,
            'key': self['chaddr']
        }, code=61).encode().buf
        self.buf += self.string(code=60, value='pyroute2').encode().buf

        for (name, value) in options.items():
            if name in ('message_type', 'client_id', 'vendor_id'):
                continue
            fmt = self._encode_map.get(name, {'format': None})['format']
            if fmt is None:
                continue
            # name is known, ok
            option_class = getattr(self, fmt)
            if isinstance(value, dict):
                option = option_class(value,
                                      code=self._encode_map[name]['code'])
            else:
                option = option_class(code=self._encode_map[name]['code'],
                                      value=value)
            self.buf += option.encode().buf

        self.buf += self.none(code=255).encode().buf
        return self
コード例 #2
0
ファイル: __init__.py プロジェクト: svinota/pyroute2
    def encode(self):
        msg.encode(self)
        self._register_options()
        # put message type
        options = self.get('options') or {'message_type': DHCPDISCOVER,
                                          'parameter_list': [1, 3, 6,
                                                             12, 15, 28]}

        self.buf += self.uint8(code=53,
                               value=options['message_type']).encode().buf
        self.buf += self.client_id({'type': 1,
                                    'key': self['chaddr']},
                                   code=61).encode().buf
        self.buf += self.string(code=60, value='pyroute2').encode().buf

        for (name, value) in options.items():
            if name in ('message_type', 'client_id', 'vendor_id'):
                continue
            fmt = self._encode_map.get(name, {'format': None})['format']
            if fmt is None:
                continue
            # name is known, ok
            option_class = getattr(self, fmt)
            if isinstance(value, dict):
                option = option_class(value,
                                      code=self._encode_map[name]['code'])
            else:
                option = option_class(code=self._encode_map[name]['code'],
                                      value=value)
            self.buf += option.encode().buf

        self.buf += self.none(code=255).encode().buf
        return self
コード例 #3
0
ファイル: __init__.py プロジェクト: yegorich/pyroute2
 def encode(self):
     # pack code
     self.buf += struct.pack('B', self.code)
     if self.code in (0, 255):
         return self
     # save buf
     save = self.buf
     self.buf = b''
     # pack data into the new buf
     if self.policy is not None:
         value = self.policy.get('encode', lambda x: x)(self.value)
         if self.policy['format'] == 'string':
             fmt = '%is' % len(value)
         else:
             fmt = self.policy['format']
         if sys.version_info[0] == 3 and isinstance(value, str):
             value = value.encode('utf-8')
         self.buf = struct.pack(fmt, value)
     else:
         msg.encode(self)
     # get the length
     data = self.buf
     self.buf = save
     self.buf += struct.pack('B', len(data))
     # attach the packed data
     self.buf += data
     return self
コード例 #4
0
ファイル: __init__.py プロジェクト: svinota/pyroute2
 def encode(self):
     # pack code
     self.buf += struct.pack('B', self.code)
     if self.code in (0, 255):
         return self
     # save buf
     save = self.buf
     self.buf = b''
     # pack data into the new buf
     if self.policy is not None:
         value = self.policy.get('encode', lambda x: x)(self.value)
         if self.policy['format'] == 'string':
             fmt = '%is' % len(value)
         else:
             fmt = self.policy['format']
         if sys.version_info[0] == 3 and isinstance(value, str):
             value = value.encode('utf-8')
         self.buf = struct.pack(fmt, value)
     else:
         msg.encode(self)
     # get the length
     data = self.buf
     self.buf = save
     self.buf += struct.pack('B', len(data))
     # attach the packed data
     self.buf += data
     return self