1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2021 Abhinay Ramesh
6 #ifndef __OSPF6_AUTH_TRAILER_H__
7 #define __OSPF6_AUTH_TRAILER_H__
9 #include "lib/keychain.h"
10 #include "ospf6_message.h"
12 #define OSPF6_AUTH_HDR_MIN_SIZE 16
13 #define OSPF6_AUTH_HDR_FULL KEYCHAIN_MAX_HASH_SIZE + OSPF6_AUTH_HDR_MIN_SIZE
15 #define OSPF6_AUTHENTICATION_NULL 0
16 #define OSPF6_AUTHENTICATION_CRYPTOGRAPHIC 1
18 /* Auth debug options */
19 extern unsigned char conf_debug_ospf6_auth
[2];
21 #define OSPF6_AUTH_TX 0
22 #define OSPF6_AUTH_RX 1
23 #define OSPF6_DEBUG_AUTH_TX_ON() (conf_debug_ospf6_auth[OSPF6_AUTH_TX] = 1)
24 #define OSPF6_DEBUG_AUTH_TX_OFF() (conf_debug_ospf6_auth[OSPF6_AUTH_TX] = 0)
25 #define OSPF6_DEBUG_AUTH_RX_ON() (conf_debug_ospf6_auth[OSPF6_AUTH_RX] = 1)
26 #define OSPF6_DEBUG_AUTH_RX_OFF() (conf_debug_ospf6_auth[OSPF6_AUTH_RX] = 0)
27 #define IS_OSPF6_DEBUG_AUTH_TX (conf_debug_ospf6_auth[OSPF6_AUTH_TX])
28 #define IS_OSPF6_DEBUG_AUTH_RX (conf_debug_ospf6_auth[OSPF6_AUTH_RX])
30 #define OSPF6_AUTH_TRAILER_KEYCHAIN (1 << 0)
31 #define OSPF6_AUTH_TRAILER_MANUAL_KEY (1 << 1)
32 #define OSPF6_AUTH_TRAILER_KEYCHAIN_VALID (1 << 2)
34 /* According to sesion 4.1 of RFC7166 defining the trailer struct */
35 struct ospf6_auth_hdr
{
42 unsigned char data
[KEYCHAIN_MAX_HASH_SIZE
];
46 OSPF6_AUTH_VALIDATE_SUCCESS
= 0,
47 OSPF6_AUTH_VALIDATE_FAILURE
,
48 OSPF6_AUTH_PROCESS_NORMAL
,
49 OSPF6_AUTH_FILE_EXIST
,
50 OSPF6_AUTH_FILE_DO_NOT_EXIST
53 void ospf6_auth_hdr_dump_send(struct ospf6_header
*ospfh
, uint16_t length
);
54 void ospf6_auth_hdr_dump_recv(struct ospf6_header
*ospfh
, uint16_t length
,
55 unsigned int lls_len
);
56 unsigned char *ospf6_hash_message_xor(unsigned char *mes1
, unsigned char *mes2
,
58 uint16_t ospf6_auth_len_get(struct ospf6_interface
*oi
);
59 int ospf6_auth_validate_pkt(struct ospf6_interface
*oi
, unsigned int *pkt_len
,
60 struct ospf6_header
*oh
, unsigned int *at_len
,
61 unsigned int *lls_block_len
);
62 int ospf6_auth_check_digest(struct ospf6_header
*oh
, struct ospf6_interface
*oi
,
63 struct in6_addr
*src
, unsigned int lls_len
);
64 void ospf6_auth_update_digest(struct ospf6_interface
*oi
,
65 struct ospf6_header
*oh
,
66 struct ospf6_auth_hdr
*ospf6_auth
, char *auth_str
,
67 uint32_t pkt_len
, enum keychain_hash_algo algo
);
68 void ospf6_auth_digest_send(struct in6_addr
*src
, struct ospf6_interface
*oi
,
69 struct ospf6_header
*oh
, uint16_t auth_len
,
71 void install_element_ospf6_debug_auth(void);
72 int config_write_ospf6_debug_auth(struct vty
*vty
);
73 void install_element_ospf6_clear_intf_auth(void);
74 enum ospf6_auth_err
ospf6_auth_nvm_file_exist(void);
75 void ospf6_auth_seqno_nvm_update(struct ospf6
*ospf6
);
76 void ospf6_auth_seqno_nvm_delete(struct ospf6
*ospf6
);
77 void ospf6_auth_seqno_nvm_read(struct ospf6
*ospf6
);
78 #endif /* __OSPF6_AUTH_TRAILER_H__ */