netif.h
3.81 KB
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
* Copyright (C) 2015 Martine Lenders <mlenders@inf.fu-berlin.de>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup net_gnrc_netif Network interfaces
* @ingroup net_gnrc
* @brief Abstraction layer for GNRC's network interfaces
*
* Network interfaces in the context of GNRC are threads for protocols that are
* below the network layer.
*
* @{
*
* @file
* @brief Definitions for GNRC's network interfaces
*
* @author Martine Lenders <mlenders@inf.fu-berlin.de>
* @author Oliver Hahm <oliver.hahm@inria.fr>
*/
#ifndef GNRC_NETIF_H_
#define GNRC_NETIF_H_
#include <stdlib.h>
#include <stdbool.h>
#include "kernel_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Maximum number of network interfaces
*/
#ifndef GNRC_NETIF_NUMOF
#define GNRC_NETIF_NUMOF (1)
#endif
/**
* @brief The add/remove operation to set network layer protocol
* specific options for an interface.
*
* @param[in] pid The PID to the new interface.
*/
typedef void (*gnrc_netif_op_t)(kernel_pid_t pid);
/**
* @brief The add and remove handlers to set network layer protocol
* specific options for an interface.
*
* @details If you implement a pair, please add it to the list in gnrc_netif.c
* statically.
*/
typedef struct {
gnrc_netif_op_t add; /**< The add operation */
gnrc_netif_op_t remove; /**< The remove operation */
} gnrc_netif_handler_t;
/**
* @brief Initializes module.
*/
void gnrc_netif_init(void);
/**
* @brief Adds a thread as interface.
*
* @param[in] pid PID of the added thread.
*
* @return 0, on success,
* @return -ENOMEM, if maximum number of interfaces has been exceeded.
*/
int gnrc_netif_add(kernel_pid_t pid);
/**
* @brief Removes a thread as interface.
*
* @param[in] pid PID of the removed thread.
*/
void gnrc_netif_remove(kernel_pid_t pid);
/**
* @brief Get all active interfaces.
*
* @param[out] netifs List of all active interfaces. There is no order ensured.
* It must at least fit @ref GNRC_NETIF_NUMOF elements.
*
* @return The number of active interfaces.
*/
size_t gnrc_netif_get(kernel_pid_t *netifs);
/**
* @brief Check if an interface exist.
*
* @param[in] pid The PID to be checked.
*
* @return True, if an interface @p pid exists.
* @return False, otherwise
*/
bool gnrc_netif_exist(kernel_pid_t pid);
/**
* @brief Converts a hardware address to a human readable string.
*
* @details The format will be like `xx:xx:xx:xx` where `xx` are the bytes
* of @p addr in hexadecimal representation.
*
* @pre @p out_len >= 3 * @p addr_len
*
* @param[out] out A string to store the output in.
* @param[out] out_len Length of @p out. Must be at least
* 3 * @p addr_len long.
* @param[in] addr A hardware address.
* @param[in] addr_len Length of @p addr.
*
* @return Copy of @p out on success.
* @return NULL, if @p out_len < 3 * @p addr_len.
*/
char *gnrc_netif_addr_to_str(char *out, size_t out_len, const uint8_t *addr,
size_t addr_len);
/**
* @brief Parses a string of colon-separated hexadecimals to a hardware
* address.
*
* @details The input format must be like `xx:xx:xx:xx` where `xx` will be the
* bytes of @p addr in hexadecimal representation.
*
* @param[out] out The resulting hardware address.
* @param[out] out_len Length of @p out.
* @param[in] str A string of colon-separated hexadecimals.
*
* @return Actual length of @p out on success.
* @return 0, on failure.
*/
size_t gnrc_netif_addr_from_str(uint8_t *out, size_t out_len, const char *str);
#ifdef __cplusplus
}
#endif
#endif /* GNRC_NETIF_H_ */
/** @} */