1# Python class for controlling Multi Link Device
2# Copyright (c) 2024, Jouni Malinen <j@w1.fi>
3#
4# This software may be distributed under the terms of the BSD license.
5# See README for more details.
6
7import os
8import logging
9import wpaspy
10
11logger = logging.getLogger()
12hapd_ctrl = '/var/run/hostapd'
13
14class MultiLinkDevice:
15    def __init__(self, ifname, ctrl=hapd_ctrl, port=8877):
16        self.ifname = ifname
17        self.ctrl = wpaspy.Ctrl(os.path.join(ctrl, ifname))
18        self.dbg = ifname
19
20    def close_ctrl(self):
21        self.ctrl.close()
22        self.ctrl = None
23
24    def request(self, cmd):
25        logger.debug(self.dbg + ": MLD CTRL: " + cmd)
26        return self.ctrl.request(cmd)
27
28    def ping(self):
29        return "PONG" in self.request("PING")
30
31def get_mld_obj(ifname, ctrl=hapd_ctrl, port=8877):
32    mld = MultiLinkDevice(ifname, ctrl, port)
33    if not mld.ping():
34        raise Exception("Could not ping MLD %s" % ifname)
35
36    return mld
37