File: message.h

package info (click to toggle)
frr 10.5.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 77,224 kB
  • sloc: ansic: 687,301; python: 227,378; perl: 6,379; sh: 2,685; cpp: 1,883; makefile: 670; yacc: 397; lex: 363; lisp: 66; xml: 35; javascript: 8
file content (76 lines) | stat: -rw-r--r-- 2,990 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// SPDX-License-Identifier: MIT
/*
Copyright (c) 2007, 2008 by Juliusz Chroboczek
*/

#ifndef BABEL_MESSAGE_H
#define BABEL_MESSAGE_H

#include "babel_interface.h"

#define MAX_BUFFERED_UPDATES 200

#define BUCKET_TOKENS_MAX     200
#define BUCKET_TOKENS_PER_SEC 40

/* A registry of assigned TLV and sub-TLV types is available at
   http://www.pps.univ-paris-diderot.fr/~jch/software/babel/babel-tlv-registry.text
*/
#define MESSAGE_PAD1	   0
#define MESSAGE_PADN	   1
#define MESSAGE_ACK_REQ	   2
#define MESSAGE_ACK	   3
#define MESSAGE_HELLO	   4
#define MESSAGE_IHU	   5
#define MESSAGE_ROUTER_ID  6
#define MESSAGE_NH	   7
#define MESSAGE_UPDATE	   8
#define MESSAGE_REQUEST	   9
#define MESSAGE_MH_REQUEST 10
#define MESSAGE_MAX	   10

/* Protocol extension through sub-TLVs. */
#define SUBTLV_PAD1	     0
#define SUBTLV_PADN	     1
#define SUBTLV_DIVERSITY     2	 /* Also known as babelz. */
#define SUBTLV_TIMESTAMP     3	 /* Used to compute RTT. */
#define SUBTLV_SOURCE_PREFIX 128 /* Source-specific routing. */
#define SUBTLV_MANDATORY     0x80

extern unsigned short myseqno;

extern int broadcast_ihu;
extern int split_horizon;

extern struct neighbour *unicast_neighbour;
extern struct timeval unicast_flush_timeout;

void parse_packet(const unsigned char *from, struct interface *ifp, const unsigned char *packet,
		  int packetlen);
void flushbuf(struct interface *ifp);
void flushupdates(struct interface *ifp);
void send_ack(struct neighbour *neigh, unsigned short nonce, unsigned short interval);
void send_hello_noupdate(struct interface *ifp, unsigned interval);
void send_hello(struct interface *ifp);
void flush_unicast(int dofree);
void send_update(struct interface *ifp, int urgent, const unsigned char *prefix,
		 unsigned char plen);
void send_update_resend(struct interface *ifp, const unsigned char *prefix, unsigned char plen);
void send_wildcard_retraction(struct interface *ifp);
void update_myseqno(void);
void send_self_update(struct interface *ifp);
void send_ihu(struct neighbour *neigh, struct interface *ifp);
void send_marginal_ihu(struct interface *ifp);
void send_request(struct interface *ifp, const unsigned char *prefix, unsigned char plen);
void send_unicast_request(struct neighbour *neigh, const unsigned char *prefix, unsigned char plen);
void send_multihop_request(struct interface *ifp, const unsigned char *prefix, unsigned char plen,
			   unsigned short seqno, const unsigned char *id, unsigned short hop_count);
void send_unicast_multihop_request(struct neighbour *neigh, const unsigned char *prefix,
				   unsigned char plen, unsigned short seqno,
				   const unsigned char *id, unsigned short hop_count);
void send_request_resend(struct neighbour *neigh, const unsigned char *prefix, unsigned char plen,
			 unsigned short seqno, unsigned char *id);
void handle_request(struct neighbour *neigh, const unsigned char *prefix, unsigned char plen,
		    unsigned char hop_count, unsigned short seqno, const unsigned char *id);

#endif