4 #include "fwp_endpoint.h"
9 int fwp_fna_init(const frsh_resource_id_t resource_id)
13 if ((rv = fwp_init()))
16 return fra_fwp_init(frsh_forb_global.orb, frsh_forb_global.fcb,
17 &frsh_forb_global.alloc_executor);
20 int fwp_fna_network_budget_to_bytes(const frsh_resource_id_t resource_id,
21 const frsh_rel_time_t *budget, size_t *nbytes)
23 *nbytes = budget->tv_nsec;
27 int fwp_fna_network_bytes_to_budget(const frsh_resource_id_t resource_id,
28 const size_t nbytes, frsh_rel_time_t *budget)
30 budget->tv_nsec = nbytes;
35 int fwp_fna_send_endpoint_created(fna_endpoint_data_t *endpoint)
37 unsigned int node, port;
38 fwp_endpoint_attr_t *attr;
39 fwp_endpoint_t *fwp_epoint;
42 node = (unsigned int) endpoint->destination;
43 port = (unsigned int) endpoint->stream_id;
44 attr = (fwp_endpoint_attr_t*) endpoint->endpoint_protocol_info.send.body;
45 rv = fwp_send_endpoint_create(node, port, attr, &fwp_epoint);
48 endpoint->protocol_info.body = fwp_epoint;
52 int fwp_fna_receive_endpoint_created(fna_endpoint_data_t *endpoint)
54 unsigned int node,port;
55 fwp_endpoint_attr_t *attr;
56 fwp_endpoint_t *fwp_epoint;
59 node = (unsigned int) endpoint->destination;
60 port = (unsigned int) endpoint->stream_id;
61 attr = (fwp_endpoint_attr_t*) endpoint->protocol_info.body;
62 rv = fwp_receive_endpoint_create(port, attr, &fwp_epoint);
66 endpoint->protocol_info.body = fwp_epoint;
67 fwp_endpoint_get_params(fwp_epoint, &node, &port, attr);
68 endpoint->stream_id = port;
73 int fwp_fna_send_endpoint_bind(fna_endpoint_data_t *endpoint, fna_vres_id_t vres)
75 return fwp_send_endpoint_bind(endpoint->protocol_info.body,
76 (fwp_vres_d_t) vres->priv);
79 int fwp_fna_send_endpoint_unbind(fna_endpoint_data_t *endpoint)
81 return fwp_send_endpoint_unbind(endpoint->protocol_info.body);
84 int fwp_fna_endpoint_destroy(fna_endpoint_data_t *endpoint)
86 return fwp_endpoint_destroy(endpoint->endpoint_protocol_info.send.body);
89 /** FNA send routine */
90 int fwp_fna_send(const fna_endpoint_data_t *endpoint, const void *msg,
93 fwp_endpoint_t *fwp_epoint;
96 fwp_epoint = endpoint->protocol_info.body;
97 return fwp_send(fwp_epoint, msg, size, flags);
100 int fwp_fna_send_sync(const fna_endpoint_data_t *endpoint, const void *msg,
103 fwp_endpoint_t *fwp_epoint;
106 fwp_epoint = endpoint->protocol_info.body;
107 return fwp_send(fwp_epoint, msg, size, flags);
110 int fwp_fna_send_async(const fna_endpoint_data_t *endpoint,const void *msg,
113 fwp_endpoint_t *fwp_epoint;
115 fwp_epoint = (fwp_endpoint_t*) endpoint->protocol_info.body;
116 return fwp_send(fwp_epoint, msg, size, MSG_DONTWAIT);
119 /** FNA receive routines */
120 int fwp_fna_receive(const fna_endpoint_data_t *endpoint,
121 void *buffer, const size_t buffer_size,
122 size_t *received_bytes, frsh_network_address_t *from)
124 unsigned int from_addr;
126 fwp_endpoint_t *fwp_epoint;
129 fwp_epoint = (fwp_endpoint_t*) endpoint->protocol_info.body;
130 len = fwp_recv(fwp_epoint, buffer, buffer_size, &from_addr, flags);
134 *received_bytes = len;
140 int fwp_fna_receive_sync(const fna_endpoint_data_t *endpoint, void *buffer,
141 const size_t buffer_size, size_t *received_bytes,
142 frsh_network_address_t *from)
144 unsigned int from_addr;
146 fwp_endpoint_t *fwp_epoint;
149 fwp_epoint = (fwp_endpoint_t*) endpoint->protocol_info.body;
150 len = fwp_recv(fwp_epoint, buffer, buffer_size, &from_addr, flags);
154 *received_bytes = len;
160 int fwp_fna_receive_async(const fna_endpoint_data_t *endpoint, void *buffer,
161 const size_t buffer_size, size_t *received_bytes,
162 frsh_network_address_t *from)
164 unsigned int from_addr;
166 fwp_endpoint_t *fwp_epoint;
169 fwp_epoint = (fwp_endpoint_t*) endpoint->protocol_info.body;
170 len = fwp_recv(fwp_epoint, buffer, buffer_size, &from_addr, flags);
174 *received_bytes = len;
180 int fwp_fna_vres_destroy(const frsh_resource_id_t resource_id,
181 const fna_vres_id_t vres)
183 // return fwp_vres_close(vres);
187 fna_operations_t fwp_fna_operations = {
188 .fna_init = fwp_fna_init,
189 .fna_contract_negotiate = NULL,
190 .fna_contract_renegotiate_sync = NULL,
191 .fna_contract_renegotiate_async = NULL,
192 .fna_vres_get_renegotiation_status = NULL,
193 .fna_vres_destroy = fwp_fna_vres_destroy,
194 .fna_vres_get_contract = NULL,
195 .fna_vres_get_usage = NULL,
196 .fna_vres_get_remaining_budget = NULL,
197 .fna_vres_get_budget_and_period = NULL,
198 .fna_resource_get_capacity = NULL,
199 .fna_resource_get_total_weight = NULL,
200 .fna_vres_decrease_capacity = NULL,
201 .fna_send_sync = NULL,
202 .fna_send_async = fwp_fna_send_async,
203 .fna_receive_sync = fwp_fna_receive_sync,
204 .fna_receive_async = fwp_fna_receive_async,
205 .fna_send_endpoint_get_status = NULL,
206 .fna_endpoint_destroy = fwp_fna_endpoint_destroy,
207 .fna_send_endpoint_created = fwp_fna_send_endpoint_created,
208 .fna_send_endpoint_bind = fwp_fna_send_endpoint_bind,
209 .fna_send_endpoint_unbind = fwp_fna_send_endpoint_unbind,
210 .fna_receive_endpoint_created = fwp_fna_receive_endpoint_created,
211 .fna_receive_endpoint_get_status = NULL,
212 .fna_network_get_max_message_size = NULL,
213 .fna_network_bytes_to_budget = fwp_fna_network_bytes_to_budget,
214 .fna_network_budget_to_bytes = fwp_fna_network_budget_to_bytes,
215 .fna_network_get_min_eff_budget = NULL