]>
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> |
db0b6c29 | 23 | #include "ofp-util.h" |
064af421 BP |
24 | |
25 | struct ofpbuf; | |
26 | struct rconn; | |
27 | ||
ad67e568 BP |
28 | enum lswitch_mode { |
29 | LSW_NORMAL, /* Always use OFPP_NORMAL. */ | |
30 | LSW_FLOOD, /* Always use OFPP_FLOOD. */ | |
31 | LSW_LEARN /* Learn MACs at controller. */ | |
32 | }; | |
33 | ||
34 | struct lswitch_config { | |
35 | enum lswitch_mode mode; | |
36 | ||
7286b1e1 | 37 | /* 0 to use exact-match flow entries, |
eec25dc1 | 38 | * a OFPFW10_* bitmask to enable specific wildcards, |
7286b1e1 BP |
39 | * or UINT32_MAX to use the default wildcards (wildcarding as many fields |
40 | * as possible. | |
41 | * | |
42 | * Ignored when max_idle < 0 (in which case no flows are set up). */ | |
43 | uint32_t wildcards; | |
ad67e568 BP |
44 | |
45 | /* <0: Process every packet at the controller. | |
46 | * >=0: Expire flows after they are unused for 'max_idle' seconds. | |
47 | * OFP_FLOW_PERMANENT: Set up permanent flows. */ | |
48 | int max_idle; | |
49 | ||
27527aa0 BP |
50 | /* Optional "flow mod" requests to send to the switch at connection time, |
51 | * to set up the flow table. */ | |
52 | const struct ofputil_flow_mod *default_flows; | |
53 | size_t n_default_flows; | |
db0b6c29 | 54 | enum ofputil_protocol usable_protocols; |
ad67e568 | 55 | |
d4cdc6b4 BP |
56 | /* The OpenFlow queue to use by default. Use UINT32_MAX to avoid |
57 | * specifying a particular queue. */ | |
58 | uint32_t default_queue; | |
59 | ||
44bac24b BP |
60 | /* Maps from a port name to a queue_id. */ |
61 | const struct simap *port_queues; | |
002c3f17 BP |
62 | |
63 | /* If true, do not reply to any messages from the switch (for debugging | |
64 | * fail-open mode). */ | |
65 | bool mute; | |
ad67e568 BP |
66 | }; |
67 | ||
68 | struct lswitch *lswitch_create(struct rconn *, const struct lswitch_config *); | |
002c3f17 | 69 | bool lswitch_is_alive(const struct lswitch *); |
c71270b7 | 70 | void lswitch_set_queue(struct lswitch *sw, uint32_t queue); |
ba186119 | 71 | void lswitch_run(struct lswitch *); |
064af421 BP |
72 | void lswitch_wait(struct lswitch *); |
73 | void lswitch_destroy(struct lswitch *); | |
064af421 | 74 | |
002c3f17 | 75 | void lswitch_mute(struct lswitch *); |
064af421 BP |
76 | |
77 | #endif /* learning-switch.h */ |