[dts] [PATCH v2 1/4] framework: add new module for load port configuration file

Qiu, Michael michael.qiu at intel.com
Wed Feb 4 07:47:33 CET 2015


On 2/4/2015 2:44 PM, Yong Liu wrote:
> Config module will load port configuration and parse port parameter.
> Port configuration will be used in the process of setting up DUT.
> User can assign port mac, numa or tester peer pci address of DUT port.
>
> Signed-off-by: Marvinliu <yong.liu at intel.com>
> ---
>  conf/ports.cfg      |  9 +++++
>  framework/config.py | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 105 insertions(+)
>  create mode 100644 conf/ports.cfg
>  create mode 100755 framework/config.py
>
> diff --git a/conf/ports.cfg b/conf/ports.cfg
> new file mode 100644
> index 0000000..55e26d8
> --- /dev/null
> +++ b/conf/ports.cfg
> @@ -0,0 +1,9 @@
> +# DUT Port Configuration
> +# [DUT IP]
> +# ports=
> +#     pci=Pci BDF,intf=Kernel interface;
> +#     pci=Pci BDF,mac=Mac address,peer=Tester Pci BDF,numa=Port Numa 
> +[DUT IP]
> +ports = 
> +    pci=XX:XX.X,intf=eth0
> +    pci=YY:YY.Y,mac=XX:XX:XX:XX:XX:XX,peer=ZZ:ZZ.Z,numa=0
> diff --git a/framework/config.py b/framework/config.py
> new file mode 100755
> index 0000000..dc4f944
> --- /dev/null
> +++ b/framework/config.py
> @@ -0,0 +1,96 @@
> +# BSD LICENSE
> +#
> +# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
> +# All rights reserved.
> +#
> +# Redistribution and use in source and binary forms, with or without
> +# modification, are permitted provided that the following conditions
> +# are met:
> +#
> +#   * Redistributions of source code must retain the above copyright
> +#     notice, this list of conditions and the following disclaimer.
> +#   * Redistributions in binary form must reproduce the above copyright
> +#     notice, this list of conditions and the following disclaimer in
> +#     the documentation and/or other materials provided with the
> +#     distribution.
> +#   * Neither the name of Intel Corporation nor the names of its
> +#     contributors may be used to endorse or promote products derived
> +#     from this software without specific prior written permission.
> +#
> +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +"""
> +Generic port and crbs configuration file load function
> +"""
> +
> +import ConfigParser  # config parse module
> +import argparse      # prase arguments module
> +
> +portconf = "../conf/ports.cfg"
> +crbconf = "../conf/crbs.cfg"
> +
> +
> +class UserConf():
> +
> +    def __init__(self, port_conf=portconf, crb_conf=crbconf):
> +        self.port_config = port_conf
> +        self.crb_config = crb_conf
> +        self.ports_cfg = {}
> +        try:
> +            self.port_conf = ConfigParser.SafeConfigParser()
> +            self.port_conf.read(self.port_config)
> +        except Exception as e:
> +            print "FAILED LOADING PORT CONFIG!!!"
> +
> +    def load_ports_config(self, crbIP):
> +        ports = []
> +        for crb in self.port_conf.sections():
> +            if crb != crbIP:
> +                continue
> +            ports = [port.strip()
> +                     for port in self.port_conf.get(crb, 'ports').split(';')]
> +
> +        for port in ports:
> +            port_cfg = self.parse_port_param(port)
> +            if 'pci' not in port_cfg:
> +                print "INVALID CONFIG FOR NO PCI ADDRESS!!!"
> +            keys = port_cfg.keys()
> +            keys.remove('pci')
> +            self.ports_cfg[port_cfg['pci']] = {key: port_cfg[key] for key in keys}
> +
> +    def check_port_available(self, pci_addr):
> +        if pci_addr in self.ports_cfg.keys():
> +            return True
> +        else:
> +            return False
> +
> +    def parse_port_param(self, port):
> +        portDict = dict()
> +
> +        for param in port.split(','):
> +            (key, _, value) = param.partition('=')
> +            if key == 'numa':
> +                portDict[key] = int(value)
> +            else:
> +                portDict[key] = value
> +        return portDict
> +
> +
> +if __name__ == '__main__':
> +    parser = argparse.ArgumentParser(description="Load DTS configuration files")
> +    parser.add_argument("-p", "--portconf", default=portconf)
> +    parser.add_argument("-c", "--crbconf", default=crbconf)
> +    args = parser.parse_args()
> +    conf = UserConf()
> +    conf.load_ports_config('192.168.1.1')
> +    conf.check_port_available('0000:86:00.0')
Acked-by: Michael Qiu <michael.qiu at intel.com>


More information about the dts mailing list