]>
Commit | Line | Data |
---|---|---|
064af421 | 1 | /* |
44bac24b | 2 | * Copyright (c) 2008, 2010, 2011, 2012 Nicira, Inc. |
064af421 | 3 | * |
a14bc59f BP |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at: | |
064af421 | 7 | * |
a14bc59f BP |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
064af421 BP |
15 | */ |
16 | ||
17 | #ifndef LEARNING_SWITCH_H | |
18 | #define LEARNING_SWITCH_H 1 | |
19 | ||
20 | #include <stdbool.h> | |
c71270b7 | 21 | #include <stdint.h> |
aaaa7553 | 22 | #include <stdio.h> |
064af421 BP |
23 | |
24 | struct ofpbuf; | |
25 | struct rconn; | |
26 | ||
ad67e568 BP |
27 | enum lswitch_mode { |
28 | LSW_NORMAL, /* Always use OFPP_NORMAL. */ | |
29 | LSW_FLOOD, /* Always use OFPP_FLOOD. */ | |
30 | LSW_LEARN /* Learn MACs at controller. */ | |
31 | }; | |
32 | ||
33 | struct lswitch_config { | |
34 | enum lswitch_mode mode; | |
35 | ||
7286b1e1 | 36 | /* 0 to use exact-match flow entries, |
eec25dc1 | 37 | * a OFPFW10_* bitmask to enable specific wildcards, |
7286b1e1 BP |
38 | * or UINT32_MAX to use the default wildcards (wildcarding as many fields |
39 | * as possible. | |
40 | * | |
41 | * Ignored when max_idle < 0 (in which case no flows are set up). */ | |
42 | uint32_t wildcards; | |
ad67e568 BP |
43 | |
44 | /* <0: Process every packet at the controller. | |
45 | * >=0: Expire flows after they are unused for 'max_idle' seconds. | |
46 | * OFP_FLOW_PERMANENT: Set up permanent flows. */ | |
47 | int max_idle; | |
48 | ||
27527aa0 BP |
49 | /* Optional "flow mod" requests to send to the switch at connection time, |
50 | * to set up the flow table. */ | |
51 | const struct ofputil_flow_mod *default_flows; | |
52 | size_t n_default_flows; | |
ad67e568 | 53 | |
d4cdc6b4 BP |
54 | /* The OpenFlow queue to use by default. Use UINT32_MAX to avoid |
55 | * specifying a particular queue. */ | |
56 | uint32_t default_queue; | |
57 | ||
44bac24b BP |
58 | /* Maps from a port name to a queue_id. */ |
59 | const struct simap *port_queues; | |
002c3f17 BP |
60 | |
61 | /* If true, do not reply to any messages from the switch (for debugging | |
62 | * fail-open mode). */ | |
63 | bool mute; | |
ad67e568 BP |
64 | }; |
65 | ||
66 | struct lswitch *lswitch_create(struct rconn *, const struct lswitch_config *); | |
002c3f17 | 67 | bool lswitch_is_alive(const struct lswitch *); |
c71270b7 | 68 | void lswitch_set_queue(struct lswitch *sw, uint32_t queue); |
ba186119 | 69 | void lswitch_run(struct lswitch *); |
064af421 BP |
70 | void lswitch_wait(struct lswitch *); |
71 | void lswitch_destroy(struct lswitch *); | |
064af421 | 72 | |
002c3f17 | 73 | void lswitch_mute(struct lswitch *); |
064af421 BP |
74 | |
75 | #endif /* learning-switch.h */ |