aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/auto_sdl/auto_sdl.api
blob: eeb43fb9a2cae6b6691f5d1e0b12c70250d7622c (plain)
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
/* SPDX-License-Identifier: Apache-2.0
 * Copyright (c) 2024 Cisco Systems, Inc.
 */

option version = "1.0.0";

/** \brief auto sdl config
    @param client_index - opaque cookie to identify the sender
    @param threshold - number of times to hit for an auto SDL entry is created
    @param remove_timeout - timeout value for the auto SDL entries after they are created
    @param enable - enable/disable
  */
autoreply define auto_sdl_config {
  u32 client_index;
  u32 context;
  u32 threshold [default=5];
  u32 remove_timeout [default=300];
  bool enable;
};

/*
 * Local Variables:
 * eval: (c-set-style "gnu")
 * End:
 */
old } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
"""
  QoS

  object abstractions for representing QoS config VPP
"""

from vpp_object import VppObject


class VppQosRecord(VppObject):
    """ QoS Record(ing) configuration """

    def __init__(self, test, intf, source):
        self._test = test
        self.intf = intf
        self.source = source

    def add_vpp_config(self):
        self._test.vapi.qos_record_enable_disable(
            enable=1,
            record={'sw_if_index': self.intf.sw_if_index,
                    'input_source': self.source})
        self._test.registry.register(self, self._test.logger)
        return self

    def remove_vpp_config(self):
        self._test.vapi.qos_record_enable_disable(
            enable=0,
            record={'sw_if_index': self.intf.sw_if_index,
                    'input_source': self.source})

    def query_vpp_config(self):
        rs = self._test.vapi.qos_record_dump()

        for r in rs:
            if self.intf.sw_if_index == r.record.sw_if_index and \
               self.source == r.record.input_source:
                return True
        return False

    def object_id(self):
        return ("qos-record-%s-%d" % (self.intf, self.source))


class VppQosStore(VppObject):
    """ QoS Store(ing) configuration """

    def __init__(self, test, intf, source, value):
        self._test = test
        self.intf = intf
        self.source = source
        self.value = value

    def add_vpp_config(self):
        self._test.vapi.qos_store_enable_disable(
            enable=1,
            store={'sw_if_index': self.intf.sw_if_index,
                   'input_source': self.source,
                   'value': self.value})
        self._test.registry.register(self, self._test.logger)
        return self

    def remove_vpp_config(self):
        self._test.vapi.qos_store_enable_disable(
            enable=0,
            store={'sw_if_index': self.intf.sw_if_index,
                   'input_source': self.source})

    def query_vpp_config(self):
        rs = self._test.vapi.qos_store_dump()

        for r in rs:
            if self.intf.sw_if_index == r.store.sw_if_index and \
               self.source == r.store.input_source and \
               self.value == r.store.value:
                return True
        return False

    def object_id(self):
        return ("qos-store-%s-%d" % (self.intf, self.source))


class VppQosEgressMap(VppObject):
    """ QoS Egress Map(ping) configuration """

    def __init__(self, test, id, rows):
        self._test = test
        self.id = id
        self.rows = rows

    def add_vpp_config(self):
        self._test.vapi.qos_egress_map_update(
            map={'id': self.id,
                 'rows': self.rows})
        self._test.registry.register(self, self._test.logger)
        return self

    def remove_vpp_config(self):
        self._test.vapi.qos_egress_map_delete(id=self.id)

    def query_vpp_config(self):
        rs = self._test.vapi.qos_egress_map_dump()

        for r in rs:
            if self.id == r.map.id:
                return True
        return False

    def object_id(self):
        return ("qos-map-%d" % (self.id))


class VppQosMark(VppObject):
    """ QoS Mark(ing) configuration """

    def __init__(self, test, intf, map, source):
        self._test = test
        self.intf = intf
        self.source = source
        self.map = map

    def add_vpp_config(self):
        self._test.vapi.qos_mark_enable_disable(
            enable=1,
            mark={'sw_if_index': self.intf.sw_if_index,
                  'map_id': self.map.id,
                  'output_source': self.source})
        self._test.registry.register(self, self._test.logger)
        return self

    def remove_vpp_config(self):
        self._test.vapi.qos_mark_enable_disable(
            enable=0,
            mark={'sw_if_index': self.intf.sw_if_index,
                  'output_source': self.source})

    def query_vpp_config(self):
        ms = self._test.vapi.qos_mark_dump()

        for m in ms:
            if self.intf.sw_if_index == m.mark.sw_if_index and \
               self.source == m.mark.output_source and \
               self.map.id == m.mark.map_id:
                return True
        return False

    def object_id(self):
        return ("qos-mark-%s-%d" % (self.intf, self.source))