]> git.proxmox.com Git - mirror_frr.git/blame - pceplib/pcep_session_logic_internals.h
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / pceplib / pcep_session_logic_internals.h
CommitLineData
acddc0ed 1// SPDX-License-Identifier: LGPL-2.1-or-later
74971473
JG
2/*
3 * This file is part of the PCEPlib, a PCEP protocol library.
4 *
5 * Copyright (C) 2020 Volta Networks https://voltanet.io/
6 *
74971473
JG
7 * Author : Brady Johnson <brady@voltanet.io>
8 *
9 */
10
11
12/*
13 * Internal Session Logic declarations, not intended to be in the public API.
14 */
15
16#ifndef SRC_PCEPSESSIONLOGICINTERNALS_H_
17#define SRC_PCEPSESSIONLOGICINTERNALS_H_
18
19
20#include <pthread.h>
21#include <stdbool.h>
22
23#include "pcep_msg_tools.h"
24
25#include "pcep_utils_double_linked_list.h"
26#include "pcep_utils_ordered_list.h"
27#include "pcep_utils_queue.h"
28
29
30typedef struct pcep_session_logic_handle_ {
31 pthread_t session_logic_thread;
32 pthread_mutex_t session_logic_mutex;
33 pthread_cond_t session_logic_cond_var;
34 bool session_logic_condition;
35 bool active;
36
37 ordered_list_handle *session_list;
38 pthread_mutex_t session_list_mutex;
39 /* Internal timers and socket events */
40 queue_handle *session_event_queue;
41
42} pcep_session_logic_handle;
43
44
45/* Used internally for Session events: message received, timer expired,
46 * or socket closed */
47typedef struct pcep_session_event_ {
48 pcep_session *session;
49 int expired_timer_id;
50 double_linked_list *received_msg_list;
51 bool socket_closed;
52
53} pcep_session_event;
54
55/* Event Counters counter-id definitions */
56typedef enum pcep_session_counters_event_counter_ids {
57 PCEP_EVENT_COUNTER_ID_PCC_CONNECT = 0,
58 PCEP_EVENT_COUNTER_ID_PCE_CONNECT = 1,
59 PCEP_EVENT_COUNTER_ID_PCC_DISCONNECT = 2,
60 PCEP_EVENT_COUNTER_ID_PCE_DISCONNECT = 3,
61 PCEP_EVENT_COUNTER_ID_TIMER_KEEPALIVE = 4,
62 PCEP_EVENT_COUNTER_ID_TIMER_DEADTIMER = 5,
63 PCEP_EVENT_COUNTER_ID_TIMER_OPENKEEPWAIT = 6,
64 PCEP_EVENT_COUNTER_ID_TIMER_OPENKEEPALIVE = 7
65
66} pcep_session_counters_event_counter_ids;
67
68/* functions implemented in pcep_session_logic_loop.c */
69void *session_logic_loop(void *data);
70int session_logic_msg_ready_handler(void *data, int socket_fd);
71void session_logic_message_sent_handler(void *data, int socket_fd);
72void session_logic_conn_except_notifier(void *data, int socket_fd);
73void session_logic_timer_expire_handler(void *data, int timer_id);
74
75void handle_timer_event(pcep_session_event *event);
76void handle_socket_comm_event(pcep_session_event *event);
77void session_send_message(pcep_session *session, struct pcep_message *message);
78
79/* defined in pcep_session_logic_states.c */
80void send_pcep_error(pcep_session *session, enum pcep_error_type error_type,
81 enum pcep_error_value error_value);
82void enqueue_event(pcep_session *session, pcep_event_type event_type,
83 struct pcep_message *message);
84void increment_unknown_message(pcep_session *session);
85
86/* defined in pcep_session_logic_counters.c */
87void create_session_counters(pcep_session *session);
88void increment_event_counters(
89 pcep_session *session,
90 pcep_session_counters_event_counter_ids counter_id);
91void increment_message_rx_counters(pcep_session *session,
92 struct pcep_message *message);
93
94/* defined in pcep_session_logic.c, also used in pcep_session_logic_states.c */
95struct pcep_message *create_pcep_open(pcep_session *session);
96
97#endif /* SRC_PCEPSESSIONLOGICINTERNALS_H_ */