]>
Commit | Line | Data |
---|---|---|
064af421 | 1 | /* |
88a20d6e | 2 | * Copyright (c) 2008, 2009, 2010 Nicira Networks. |
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 RCONN_H | |
18 | #define RCONN_H 1 | |
19 | ||
064af421 BP |
20 | #include <stdbool.h> |
21 | #include <stdint.h> | |
22 | #include <time.h> | |
23 | ||
24 | /* A wrapper around vconn that provides queuing and optionally reliability. | |
25 | * | |
26 | * An rconn maintains a message transmission queue of bounded length specified | |
27 | * by the caller. The rconn does not guarantee reliable delivery of | |
28 | * queued messages: all queued messages are dropped when reconnection becomes | |
29 | * necessary. | |
30 | * | |
31 | * An rconn optionally provides reliable communication, in this sense: the | |
32 | * rconn will re-connect, with exponential backoff, when the underlying vconn | |
33 | * disconnects. | |
34 | */ | |
35 | ||
36 | struct vconn; | |
37 | struct rconn_packet_counter; | |
38 | ||
064af421 BP |
39 | struct rconn *rconn_create(int inactivity_probe_interval, int max_backoff); |
40 | ||
41 | void rconn_set_max_backoff(struct rconn *, int max_backoff); | |
42 | int rconn_get_max_backoff(const struct rconn *); | |
43 | void rconn_set_probe_interval(struct rconn *, int inactivity_probe_interval); | |
44 | int rconn_get_probe_interval(const struct rconn *); | |
45 | ||
eb15cdbb BP |
46 | void rconn_connect(struct rconn *, const char *target, const char *name); |
47 | void rconn_connect_unreliably(struct rconn *, | |
48 | struct vconn *, const char *name); | |
064af421 BP |
49 | void rconn_reconnect(struct rconn *); |
50 | void rconn_disconnect(struct rconn *); | |
51 | void rconn_destroy(struct rconn *); | |
52 | ||
53 | void rconn_run(struct rconn *); | |
54 | void rconn_run_wait(struct rconn *); | |
55 | struct ofpbuf *rconn_recv(struct rconn *); | |
56 | void rconn_recv_wait(struct rconn *); | |
57 | int rconn_send(struct rconn *, struct ofpbuf *, struct rconn_packet_counter *); | |
58 | int rconn_send_with_limit(struct rconn *, struct ofpbuf *, | |
59 | struct rconn_packet_counter *, int queue_limit); | |
60 | unsigned int rconn_packets_sent(const struct rconn *); | |
61 | unsigned int rconn_packets_received(const struct rconn *); | |
62 | ||
63 | void rconn_add_monitor(struct rconn *, struct vconn *); | |
64 | ||
65 | const char *rconn_get_name(const struct rconn *); | |
eb15cdbb BP |
66 | void rconn_set_name(struct rconn *, const char *new_name); |
67 | const char *rconn_get_target(const struct rconn *); | |
68 | ||
064af421 BP |
69 | bool rconn_is_alive(const struct rconn *); |
70 | bool rconn_is_connected(const struct rconn *); | |
7778bd15 | 71 | bool rconn_is_admitted(const struct rconn *); |
064af421 BP |
72 | int rconn_failure_duration(const struct rconn *); |
73 | bool rconn_is_connectivity_questionable(struct rconn *); | |
74 | ||
193456d5 JP |
75 | uint32_t rconn_get_remote_ip(const struct rconn *); |
76 | uint16_t rconn_get_remote_port(const struct rconn *); | |
77 | uint32_t rconn_get_local_ip(const struct rconn *); | |
78 | uint16_t rconn_get_local_port(const struct rconn *); | |
064af421 BP |
79 | |
80 | const char *rconn_get_state(const struct rconn *); | |
81 | unsigned int rconn_get_attempted_connections(const struct rconn *); | |
82 | unsigned int rconn_get_successful_connections(const struct rconn *); | |
83 | time_t rconn_get_last_connection(const struct rconn *); | |
7df824b7 | 84 | time_t rconn_get_last_received(const struct rconn *); |
064af421 BP |
85 | time_t rconn_get_creation_time(const struct rconn *); |
86 | unsigned long int rconn_get_total_time_connected(const struct rconn *); | |
87 | int rconn_get_backoff(const struct rconn *); | |
88 | unsigned int rconn_get_state_elapsed(const struct rconn *); | |
89 | unsigned int rconn_get_connection_seqno(const struct rconn *); | |
88a20d6e | 90 | int rconn_get_last_error(const struct rconn *); |
064af421 BP |
91 | |
92 | /* Counts the number of packets queued into an rconn by a given source. */ | |
93 | struct rconn_packet_counter { | |
94 | int n; /* Number of packets queued. */ | |
95 | int ref_cnt; /* Number of owners. */ | |
96 | }; | |
97 | ||
98 | struct rconn_packet_counter *rconn_packet_counter_create(void); | |
99 | void rconn_packet_counter_destroy(struct rconn_packet_counter *); | |
100 | void rconn_packet_counter_inc(struct rconn_packet_counter *); | |
101 | void rconn_packet_counter_dec(struct rconn_packet_counter *); | |
102 | ||
103 | static inline int | |
104 | rconn_packet_counter_read(const struct rconn_packet_counter *counter) | |
105 | { | |
106 | return counter->n; | |
107 | } | |
108 | ||
109 | #endif /* rconn.h */ |