File: mlnx_dhcp.py

package info (click to toggle)
networking-mlnx 1%3A13.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 704 kB
  • sloc: python: 4,863; sh: 180; makefile: 36
file content (56 lines) | stat: -rw-r--r-- 1,984 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# Copyright 2015 Mellanox Technologies, Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from neutron_lib.api.definitions import extra_dhcp_opt as edo_ext

from neutron.agent.linux import dhcp


class DhcpOpt(object):
    def __init__(self, **kwargs):
        self.__dict__.update(ip_version=4)
        self.__dict__.update(kwargs)

    def __str__(self):
        return str(self.__dict__)


class MlnxDnsmasq(dhcp.Dnsmasq):
    _PREFIX = 'ff:00:00:00:00:00:02:00:00:02:c9:00:'
    _MIDDLE = ':00:00:'

    def _gen_client_id(self, port):
        mac_address = port.mac_address
        mac_first = mac_address[:8]
        mac_last = mac_address[9:]
        client_id = ''.join([self._PREFIX, mac_first, self._MIDDLE, mac_last])
        return client_id

    def _gen_client_id_opt(self, client_id):
        return DhcpOpt(opt_name=edo_ext.DHCP_OPT_CLIENT_ID,
                       opt_value=client_id)

    def _get_port_extra_dhcp_opts(self, port):
        client_id = self._gen_client_id(port)
        if hasattr(port, edo_ext.EXTRADHCPOPTS):
            for opt in port.extra_dhcp_opts:
                if opt.opt_name == edo_ext.DHCP_OPT_CLIENT_ID:
                    opt.opt_value = client_id
                    return port.extra_dhcp_opts
            port.extra_dhcp_opts.append(self._gen_client_id_opt(client_id))
        else:
            setattr(port, edo_ext.EXTRADHCPOPTS,
                    [self._gen_client_id_opt(client_id)])
        return port.extra_dhcp_opts