vpp: Initial support of VPP vSwitch
[vswitchperf.git] / vswitches / vswitch.py
1 # Copyright 2015-2016 Intel Corporation.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #   http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 """Generic interface VSPERF uses for controlling a vSwitch
16 """
17
18 class IVSwitch(object):
19     """Interface class that is implemented by vSwitch-specific classes
20
21     Other methods are called only between start() and stop()
22     """
23     def start(self):
24         """Start the vSwitch
25
26         If vSwitch is split to multiple processes, has kernel modules etc.,
27         this is expected to set them all up in correct sequence
28         """
29         raise NotImplementedError()
30
31     def stop(self):
32         """Stop the vSwitch
33
34         If vSwitch is split to multiple processes, has kernel modules etc.,
35         this is expected to terminate and clean all of them in correct sequence
36         """
37         raise NotImplementedError()
38
39     def add_switch(self, switch_name, params):
40         """Create a new logical switch with no ports
41
42         :param switch_name: The name of the new logical switch
43         :param params: Optional parameters to configure switch
44
45         :returns: None
46         """
47         raise NotImplementedError()
48
49     def del_switch(self, switch_name):
50         """Destroy the given logical switch
51
52         :param switch_name: The name of the logical switch to be destroyed
53         :returns: None
54         """
55         raise NotImplementedError()
56
57     def add_phy_port(self, switch_name):
58         """Create a new port to the logical switch that is attached to a
59         physical port
60
61         :param switch_name: The switch where the port is attached to
62         :returns: (port name, OpenFlow port number)
63         """
64         raise NotImplementedError()
65
66     def add_vport(self, switch_name):
67         """Create a new port to the logical switch for VM connections
68
69         :param switch_name: The switch where the port is attached to
70         :returns: (port name, OpenFlow port number)
71         """
72         raise NotImplementedError()
73
74     def add_tunnel_port(self, switch_name, remote_ip, tunnel_type, params=None):
75         """Create a new port to the logical switch for tunneling
76
77         :param switch_name: The switch where the port is attached to
78         :returns: (port name, OpenFlow port number)
79         """
80         raise NotImplementedError()
81
82     def get_ports(self, switch_name):
83         """Return a list of tuples describing the ports of the logical switch
84
85         :param switch_name: The switch whose ports to return
86         :returns: [(port name, OpenFlow port number), ...]
87         """
88         raise NotImplementedError()
89
90     def del_port(self, switch_name, port_name):
91         """Delete the port from the logical switch
92
93         The port can be either physical or virtual
94
95         :param switch_name: The switch on which to operate
96         :param port_name: The port to delete
97         """
98         raise NotImplementedError()
99
100     def add_flow(self, switch_name, flow, cache='off'):
101         """Add a flow rule to the logical switch
102
103         :param switch_name: The switch on which to operate
104         :param flow: Flow description as a dictionary
105         :param cache: Optional. Specifies if flow should be inserted
106             to the switch or cached to increase performance during manipulation
107             with large number of flows.
108             Values:
109                 'off'   - cache is off and flow is inserted directly to the switch
110                 'on'    - cache is on and flow is inserted into the cache
111                 'flush' - cache content will be inserted into the switch
112
113         Example flow dictionary:
114             flow = {
115                 'in_port': '1',
116                 'idle_timeout': '0',
117                 'actions': ['output:3']
118             }
119         """
120         raise NotImplementedError()
121
122     def del_flow(self, switch_name, flow=None):
123         """Delete the flow rule from the logical switch
124
125         :param switch_name: The switch on which to operate
126         :param flow: Flow description as a dictionary
127
128         For flow dictionary description, see add_flow
129         For flow==None, all flows are deleted
130         """
131         raise NotImplementedError()
132
133     def add_connection(self, switch_name, port1, port2, bidir=False):
134         """Creates connection between given ports.
135
136         :param switch_name: switch on which to operate
137         :param port1: port to be used in connection
138         :param port2: port to be used in connection
139         :param bidir: switch between uni and bidirectional traffic
140
141         :raises: RuntimeError
142         """
143         raise NotImplementedError()
144
145     def del_connection(self, switch_name, port1, port2, bidir=False):
146         """Remove connection between two interfaces.
147
148         :param switch_name: switch on which to operate
149         :param port1: port to be used in connection
150         :param port2: port to be used in connection
151         :param bidir: switch between uni and bidirectional traffic
152
153         :raises: RuntimeError
154         """
155         raise NotImplementedError()
156
157     def dump_connections(self, switch_name):
158         """Dump connections between interfaces.
159
160         :param switch_name: switch on which to operate
161
162         :raises: RuntimeError
163         """
164         raise NotImplementedError()
165
166     def dump_flows(self, switch_name):
167         """Dump flows from the logical switch
168
169         :param switch_name: The switch on which to operate
170         """
171         raise NotImplementedError()
172
173     def add_route(self, switch_name, network, destination):
174         """Add a route for tunneling routing table
175
176         :param switch_name: The switch on which to operate
177         :param network: Target destination network
178         :param destination: Gateway IP
179         """
180         raise NotImplementedError()
181
182     def set_tunnel_arp(self, ip_addr, mac_addr, switch_name):
183         """Add arp entry for tunneling
184
185         :param ip_addr: IP of bridge
186         :param mac_addr: MAC address of the bridge
187         :param switch_name: Name of the bridge
188         """
189         raise NotImplementedError()