pkt_gen: MoonGen updated to keep parity with master
[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 dump_flows(self, switch_name):
134         """Dump flows from the logical switch
135
136         :param switch_name: The switch on which to operate
137         """
138         raise NotImplementedError()
139
140     def add_route(self, switch_name, network, destination):
141         """Add a route for tunneling routing table
142
143         :param switch_name: The switch on which to operate
144         :param network: Target destination network
145         :param destination: Gateway IP
146         """
147         raise NotImplementedError()
148
149     def set_tunnel_arp(self, ip_addr, mac_addr, switch_name):
150         """Add arp entry for tunneling
151
152         :param ip_addr: IP of bridge
153         :param mac_addr: MAC address of the bridge
154         :param switch_name: Name of the bridge
155         """
156         raise NotImplementedError()