![]() |
The FreeRADIUS server $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
|
2-way channels based on kqueue and atomic queues. More...
#include <freeradius-devel/util/table.h>#include <freeradius-devel/io/base.h>#include <freeradius-devel/io/control.h>#include <freeradius-devel/io/message.h>#include <freeradius-devel/util/dlist.h>#include <freeradius-devel/util/heap.h>#include <freeradius-devel/util/log.h>#include <sys/types.h>#include <sys/event.h>
Include dependency graph for channel.h:Go to the source code of this file.
Data Structures | |
| struct | fr_channel_data_t |
| Channel information which is added to a message. More... | |
| union | fr_channel_data_t.__unnamed31__ |
| struct | fr_channel_data_t.__unnamed31__.channel |
| struct | fr_channel_data_t.__unnamed31__.live |
| union | fr_channel_data_t.__unnamed33__ |
| struct | fr_channel_data_t.__unnamed33__.reply |
| struct | fr_channel_data_t.__unnamed33__.request |
| struct | fr_channel_stats_t |
| Statistics for the channel. More... | |
Macros | |
| #define | PRIORITY_HIGH (1 << 15) |
| #define | PRIORITY_LOW (1 << 13) |
| #define | PRIORITY_NORMAL (1 << 14) |
| #define | PRIORITY_NOW (1 << 16) |
Typedefs | |
| typedef enum fr_channel_event_t | fr_channel_event_t |
| typedef void(* | fr_channel_recv_callback_t) (void *ctx, fr_channel_t *ch, fr_channel_data_t *cd) |
| typedef struct fr_channel_s | fr_channel_t |
| A two-way channel (i.e. | |
| typedef struct fr_listen | fr_listen_t |
Enumerations | |
| enum | fr_channel_event_t { FR_CHANNEL_ERROR = 0 , FR_CHANNEL_DATA_READY_RESPONDER , FR_CHANNEL_DATA_READY_REQUESTOR , FR_CHANNEL_OPEN , FR_CHANNEL_CLOSE , FR_CHANNEL_NOOP , FR_CHANNEL_EMPTY } |
Functions | |
| bool | fr_channel_active (fr_channel_t *ch) |
| Check if a channel is active. | |
| fr_channel_t * | fr_channel_create (TALLOC_CTX *ctx, fr_control_t *frontend, fr_control_t *worker, bool same) |
| Create a new channel. | |
| int | fr_channel_null_reply (fr_channel_t *ch) |
| Don't send a reply message into the channel. | |
| bool | fr_channel_recv_reply (fr_channel_t *ch) |
| Receive a reply message from the channel. | |
| bool | fr_channel_recv_request (fr_channel_t *ch) |
| Receive a request message from the channel. | |
| void | fr_channel_requestor_uctx_add (fr_channel_t *ch, void *ctx) |
| Add network-specific data to a channel. | |
| void * | fr_channel_requestor_uctx_get (fr_channel_t *ch) |
| Get network-specific data from a channel. | |
| int | fr_channel_responder_ack_close (fr_channel_t *ch) |
| Acknowledge that the channel is closing. | |
| int | fr_channel_responder_sleeping (fr_channel_t *ch) |
| Signal a channel that the responder is sleeping. | |
| void | fr_channel_responder_uctx_add (fr_channel_t *ch, void *ctx) |
| Add responder-specific data to a channel. | |
| void * | fr_channel_responder_uctx_get (fr_channel_t *ch) |
| Get responder-specific data from a channel. | |
| int | fr_channel_send_reply (fr_channel_t *ch, fr_channel_data_t *cd) |
| Send a reply message into the channel. | |
| int | fr_channel_send_request (fr_channel_t *ch, fr_channel_data_t *cm) |
| Send a request message into the channel. | |
| int | fr_channel_service_kevent (fr_channel_t *ch, fr_control_t *c, struct kevent const *kev) |
| fr_channel_event_t | fr_channel_service_message (fr_time_t when, fr_channel_t **p_channel, void const *data, size_t data_size) |
| Service a control-plane message. | |
| int | fr_channel_set_recv_reply (fr_channel_t *ch, void *ctx, fr_channel_recv_callback_t recv_reply)) |
| int | fr_channel_set_recv_request (fr_channel_t *ch, void *ctx, fr_channel_recv_callback_t recv_reply)) |
| int | fr_channel_signal_open (fr_channel_t *ch) |
| Send a channel to a responder. | |
| int | fr_channel_signal_responder_close (fr_channel_t *ch) |
| Signal a responder that the channel is closing. | |
| void | fr_channel_stats_log (fr_channel_t const *ch, fr_log_t const *log, char const *file, int line) |
Variables | |
| fr_table_num_sorted_t const | channel_packet_priority [] |
| size_t | channel_packet_priority_len |
| fr_table_num_sorted_t const | channel_signals [] |
| size_t | channel_signals_len |
2-way channels based on kqueue and atomic queues.
Definition in file channel.h.
| struct fr_channel_data_t |
Channel information which is added to a message.
The messages are just for exchanging packet data. The channel data structure is for exchanging requests and replies.
Collaboration diagram for fr_channel_data_t:| Data Fields | ||
|---|---|---|
| union fr_channel_data_t.__unnamed31__ | __unnamed__ | |
| union fr_channel_data_t.__unnamed33__ | __unnamed__ | |
| fr_listen_t * | listen | for tracking packet transport, etc. |
| fr_message_t | m | the message header |
| void * | packet_ctx | Packet specific context for holding client information, and other proto_* specific information that needs to be passed to the request. |
| uint32_t | priority | Priority of this packet. |
| union fr_channel_data_t.__unnamed31__ |
| Data Fields | ||
|---|---|---|
| struct fr_channel_data_t.__unnamed31__.channel | channel | |
| struct fr_channel_data_t.__unnamed31__.live | live | |
| struct fr_channel_data_t.__unnamed31__.channel |
| Data Fields | ||
|---|---|---|
| fr_channel_t * | ch | channel where this messages was received |
| fr_heap_index_t | heap_id | for the various queues |
| struct fr_channel_data_t.__unnamed31__.live |
| union fr_channel_data_t.__unnamed33__ |
| Data Fields | ||
|---|---|---|
| struct fr_channel_data_t.__unnamed33__.reply | reply | |
| struct fr_channel_data_t.__unnamed33__.request | request | |
| struct fr_channel_data_t.__unnamed33__.reply |
| Data Fields | ||
|---|---|---|
| fr_time_delta_t | cpu_time | Total CPU time, including predicted work, (only worker -> network). |
| fr_time_delta_t | processing_time | Actual processing time for this packet (only worker -> network). |
| fr_time_t | request_time | Timestamp of the request packet. |
| struct fr_channel_data_t.__unnamed33__.request |
| struct fr_channel_stats_t |
Collaboration diagram for fr_channel_stats_t:| Data Fields | ||
|---|---|---|
| uint64_t | kevents | Number of times we've looked at kevents. |
| fr_time_t | last_read_other | Last time we successfully read a message from the other the channel. |
| fr_time_t | last_sent_signal | The last time when we signaled the other end. |
| fr_time_t | last_write | Last write to the channel. |
| fr_time_delta_t | message_interval | Interval between messages. |
| uint64_t | outstanding | Number of outstanding requests with no reply. |
| uint64_t | packets | Number of actual data packets. |
| uint64_t | resignals | Number of signals resent. |
| uint64_t | signals | Number of kevent signals we've sent. |
| typedef enum fr_channel_event_t fr_channel_event_t |
| typedef void(* fr_channel_recv_callback_t) (void *ctx, fr_channel_t *ch, fr_channel_data_t *cd) |
| typedef struct fr_channel_s fr_channel_t |
| typedef struct fr_listen fr_listen_t |
| enum fr_channel_event_t |
| bool fr_channel_active | ( | fr_channel_t * | ch | ) |
Check if a channel is active.
A channel may be closed by either end. If so, it stays alive (but inactive) until both ends acknowledge the close.
| [in] | ch | the channel |
Definition at line 812 of file channel.c.
Here is the caller graph for this function:| fr_channel_t * fr_channel_create | ( | TALLOC_CTX * | ctx, |
| fr_control_t * | requestor, | ||
| fr_control_t * | responder, | ||
| bool | same | ||
| ) |
Create a new channel.
| [in] | ctx | The talloc_ctx to allocate channel data in. |
| [in] | requestor | control plane. |
| [in] | responder | control plane. |
| [in] | same | whether or not the channel is for the same thread |
Definition at line 183 of file channel.c.
Here is the call graph for this function:
Here is the caller graph for this function:| int fr_channel_null_reply | ( | fr_channel_t * | ch | ) |
| bool fr_channel_recv_reply | ( | fr_channel_t * | ch | ) |
| bool fr_channel_recv_request | ( | fr_channel_t * | ch | ) |
| void fr_channel_requestor_uctx_add | ( | fr_channel_t * | ch, |
| void * | uctx | ||
| ) |
| void * fr_channel_requestor_uctx_get | ( | fr_channel_t * | ch | ) |
| int fr_channel_responder_ack_close | ( | fr_channel_t * | ch | ) |
| int fr_channel_responder_sleeping | ( | fr_channel_t * | ch | ) |
Signal a channel that the responder is sleeping.
This function should be called from the responders idle loop. i.e. only when it has nothing else to do.
| [in] | ch | the channel to signal we're no longer listening on. |
Definition at line 646 of file channel.c.
Here is the call graph for this function:| void fr_channel_responder_uctx_add | ( | fr_channel_t * | ch, |
| void * | uctx | ||
| ) |
| void * fr_channel_responder_uctx_get | ( | fr_channel_t * | ch | ) |
| int fr_channel_send_reply | ( | fr_channel_t * | ch, |
| fr_channel_data_t * | cd | ||
| ) |
Send a reply message into the channel.
The message should be initialized, other than "sequence" and "ack".
| [in] | ch | the channel to send the reply on. |
| [in] | cd | the message to send |
Definition at line 511 of file channel.c.
Here is the call graph for this function:
Here is the caller graph for this function:| int fr_channel_send_request | ( | fr_channel_t * | ch, |
| fr_channel_data_t * | cd | ||
| ) |
Send a request message into the channel.
The message should be initialized, other than "sequence" and "ack".
This function automatically calls the recv_reply callback if there is a reply.
| [in] | ch | the channel to send the request on. |
| [in] | cd | the message to send. |
Definition at line 306 of file channel.c.
Here is the call graph for this function:
Here is the caller graph for this function:| int fr_channel_service_kevent | ( | fr_channel_t * | ch, |
| fr_control_t * | c, | ||
| struct kevent const * | kev | ||
| ) |
| fr_channel_event_t fr_channel_service_message | ( | fr_time_t | when, |
| fr_channel_t ** | p_channel, | ||
| void const * | data, | ||
| size_t | data_size | ||
| ) |
Service a control-plane message.
| [in] | when | The current time. |
| [out] | p_channel | The channel which should be serviced. |
| [in] | data | The control message. |
| [in] | data_size | The size of the control message. |
Definition at line 685 of file channel.c.
Here is the call graph for this function:
Here is the caller graph for this function:| int fr_channel_set_recv_reply | ( | fr_channel_t * | ch, |
| void * | ctx, | ||
| fr_channel_recv_callback_t | recv_reply | ||
| ) |
| int fr_channel_set_recv_request | ( | fr_channel_t * | ch, |
| void * | ctx, | ||
| fr_channel_recv_callback_t | recv_reply | ||
| ) |
| int fr_channel_signal_open | ( | fr_channel_t * | ch | ) |
| int fr_channel_signal_responder_close | ( | fr_channel_t * | ch | ) |
| void fr_channel_stats_log | ( | fr_channel_t const * | ch, |
| fr_log_t const * | log, | ||
| char const * | file, | ||
| int | line | ||
| ) |
|
extern |
|
extern |
1.9.8