]>
Commit | Line | Data |
---|---|---|
e0edde6f | 1 | /* Copyright (c) 2010, 2011 Nicira, Inc. |
b31bcf60 EJ |
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 | ||
16 | #ifndef CFM_H | |
17 | #define CFM_H 1 | |
18 | ||
19 | #include <stdint.h> | |
20 | ||
21 | #include "hmap.h" | |
2a899f6e | 22 | #include "openvswitch/types.h" |
b31bcf60 EJ |
23 | |
24 | struct flow; | |
2a899f6e | 25 | struct ofpbuf; |
b31bcf60 | 26 | |
189cb9e4 EJ |
27 | #define CFM_RANDOM_VLAN UINT16_MAX |
28 | ||
b9380396 EJ |
29 | #define CFM_FAULT_REASONS \ |
30 | CFM_FAULT_REASON(RECV, recv) \ | |
31 | CFM_FAULT_REASON(RDI, rdi) \ | |
32 | CFM_FAULT_REASON(MAID, maid) \ | |
33 | CFM_FAULT_REASON(LOOPBACK, loopback) \ | |
34 | CFM_FAULT_REASON(OVERFLOW, overflow) \ | |
2b540ecb MM |
35 | CFM_FAULT_REASON(OVERRIDE, override) \ |
36 | CFM_FAULT_REASON(INTERVAL, interval) \ | |
37 | CFM_FAULT_REASON(SEQUENCE, sequence) | |
b9380396 EJ |
38 | |
39 | enum cfm_fault_bit_index { | |
40 | #define CFM_FAULT_REASON(NAME, STR) CFM_FAULT_INDEX_##NAME, | |
41 | CFM_FAULT_REASONS | |
42 | #undef CFM_FAULT_REASON | |
43 | CFM_FAULT_N_REASONS | |
44 | }; | |
45 | ||
46 | enum cfm_fault_reason { | |
47 | #define CFM_FAULT_REASON(NAME, STR) \ | |
48 | CFM_FAULT_##NAME = 1 << CFM_FAULT_INDEX_##NAME, | |
49 | CFM_FAULT_REASONS | |
50 | #undef CFM_FAULT_REASON | |
51 | }; | |
52 | ||
a5610457 | 53 | struct cfm_settings { |
348f01e3 | 54 | uint64_t mpid; /* The MPID of this CFM. */ |
b31bcf60 | 55 | int interval; /* The requested transmission interval. */ |
ef9819b5 | 56 | bool extended; /* Run in extended mode. */ |
86dc6501 | 57 | bool opup; /* Operational State. */ |
189cb9e4 EJ |
58 | uint16_t ccm_vlan; /* CCM Vlan tag. Zero if none. |
59 | CFM_RANDOM_VLAN if random. */ | |
a7aa2d3c | 60 | uint8_t ccm_pcp; /* CCM Priority. Zero if none. */ |
b31bcf60 EJ |
61 | }; |
62 | ||
9ac3fce4 | 63 | void cfm_init(void); |
6f629657 | 64 | struct cfm *cfm_create(const char *name); |
b31bcf60 | 65 | void cfm_destroy(struct cfm *); |
a58727fb | 66 | void cfm_run(struct cfm *); |
a58727fb | 67 | bool cfm_should_send_ccm(struct cfm *); |
c0a2e71d | 68 | void cfm_compose_ccm(struct cfm *, struct ofpbuf *packet, uint8_t eth_src[6]); |
b31bcf60 | 69 | void cfm_wait(struct cfm *); |
a5610457 | 70 | bool cfm_configure(struct cfm *, const struct cfm_settings *); |
ef9819b5 | 71 | bool cfm_should_process_flow(const struct cfm *cfm, const struct flow *); |
b31bcf60 | 72 | void cfm_process_heartbeat(struct cfm *, const struct ofpbuf *packet); |
b9380396 | 73 | int cfm_get_fault(const struct cfm *); |
3967a833 | 74 | int cfm_get_health(const struct cfm *); |
86dc6501 | 75 | bool cfm_get_opup(const struct cfm *); |
1de11730 EJ |
76 | void cfm_get_remote_mpids(const struct cfm *, const uint64_t **rmps, |
77 | size_t *n_rmps); | |
b9380396 | 78 | const char *cfm_fault_reason_to_str(int fault); |
a5610457 | 79 | |
b31bcf60 | 80 | #endif /* cfm.h */ |