Mbed OS Reference
Loading...
Searching...
No Matches
L3IP.h
1/*
2 * Copyright (c) 2018 ARM Limited
3 * SPDX-License-Identifier: Apache-2.0
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef L3IP_H
19#define L3IP_H
20
21#include <stdbool.h>
22#include "Callback.h"
23#include "NetStackMemoryManager.h"
24#include "SocketAddress.h"
25
26/**
27 * This interface should be used to abstract low level access to networking hardware
28 * All operations receive a `void *` hardware pointer which an l3ip device provides when
29 * it is registered with a stack.
30 */
31class L3IP {
32public:
33
34 /** Return the default on-board L3IP
35 *
36 * Returns the default on-board L3IP - this will be target-specific, and
37 * may not be available on all targets.
38 */
40
41 /**
42 * Callback to be registered with L3IP interface and to be called for received packets
43 *
44 * <br>
45 * \c buf : Received data
46 */
47 typedef mbed::Callback<void (net_stack_mem_buf_t *buf)> l3ip_link_input_cb_t;
48
49 /**
50 * Callback to be registered with L3IP interface and to be called for link status changes
51 *
52 * <br>
53 * \c up : Link status
54 */
56
57 /**
58 * Return maximum transmission unit
59 *
60 * @return MTU in bytes
61 */
62 virtual uint32_t get_mtu_size() const = 0;
63
64 /**
65 * Gets memory buffer alignment preference
66 *
67 * Gets preferred memory buffer alignment of the l3ip device.
68 * @return Memory alignment requirement in bytes
69 */
70 virtual uint32_t get_align_preference() const = 0;
71
72 /**
73 * Return interface name
74 *
75 * @param name Pointer to where the name should be written
76 * @param size Maximum number of characters to copy
77 */
78 virtual void get_ifname(char *name, uint8_t size) const = 0;
79
80 /**
81 * Sends the packet over the link
82 *
83 * That cannot be called from an interrupt context.
84 *
85 * @param buf Packet to be send
86 * @return True if the packet was send successfully, false otherwise
87 */
88 virtual bool link_out(net_stack_mem_buf_t *buf) = 0;
89
90 /**
91 * Initializes the hardware
92 *
93 * @return True on success, False in case of an error.
94 */
95 virtual bool power_up() = 0;
96
97 /**
98 * Deinitializes the hardware
99 *
100 */
101 virtual void power_down() = 0;
102
103 /**
104 * Sets a callback that needs to be called for packets received for that interface
105 *
106 * @param input_cb Function to be register as a callback
107 */
108 virtual void set_link_input_cb(l3ip_link_input_cb_t input_cb) = 0;
109
110 /**
111 * Sets a callback that needs to be called on link status changes for given interface
112 *
113 * @param state_cb Function to be register as a callback
114 */
116
117 /** Add device to an IP4 multicast group
118 *
119 * @param address An IP4 multicast group address
120 */
121 virtual void add_ipv4_multicast_group(const SocketAddress &address) = 0;
122
123 /** Add device to an IP6 multicast group
124 *
125 * @param address An IP6 multicast group address
126 */
127 virtual void add_ipv6_multicast_group(const SocketAddress &address) = 0;
128
129 /** Remove device from an IPV4 multicast group
130 *
131 * @param address An IPV4 multicast group address
132 */
133 virtual void remove_ipv4_multicast_group(const SocketAddress &address) = 0;
134
135 /** Remove device from an IPV6 multicast group
136 *
137 * @param address An IPV6 multicast group address
138 */
139 virtual void remove_ipv6_multicast_group(const SocketAddress &address) = 0;
140
141 /** Request reception of all multicast packets
142 *
143 * @param all True to receive all multicasts
144 * False to receive only multicasts addressed to specified groups
145 */
146 virtual void set_all_multicast(bool all) = 0;
147
148 /** Sets memory manager that is used to handle memory buffers
149 *
150 * @param mem_mngr Pointer to memory manager
151 */
152 virtual void set_memory_manager(NetStackMemoryManager &mem_mngr) = 0;
153};
154
155
156
157
158#endif /* L3IP_H */
SocketAddress class.
This interface should be used to abstract low level access to networking hardware All operations rece...
Definition: L3IP.h:31
virtual void remove_ipv4_multicast_group(const SocketAddress &address)=0
Remove device from an IPV4 multicast group.
mbed::Callback< void(bool up)> l3ip_link_state_change_cb_t
Callback to be registered with L3IP interface and to be called for link status changes.
Definition: L3IP.h:55
virtual void set_memory_manager(NetStackMemoryManager &mem_mngr)=0
Sets memory manager that is used to handle memory buffers.
virtual void set_all_multicast(bool all)=0
Request reception of all multicast packets.
virtual void set_link_state_cb(l3ip_link_state_change_cb_t state_cb)=0
Sets a callback that needs to be called on link status changes for given interface.
virtual void add_ipv4_multicast_group(const SocketAddress &address)=0
Add device to an IP4 multicast group.
virtual bool power_up()=0
Initializes the hardware.
static L3IP & get_default_instance()
Return the default on-board L3IP.
virtual void remove_ipv6_multicast_group(const SocketAddress &address)=0
Remove device from an IPV6 multicast group.
virtual void get_ifname(char *name, uint8_t size) const =0
Return interface name.
virtual uint32_t get_align_preference() const =0
Gets memory buffer alignment preference.
virtual uint32_t get_mtu_size() const =0
Return maximum transmission unit.
virtual void power_down()=0
Deinitializes the hardware.
virtual bool link_out(net_stack_mem_buf_t *buf)=0
Sends the packet over the link.
mbed::Callback< void(net_stack_mem_buf_t *buf)> l3ip_link_input_cb_t
Callback to be registered with L3IP interface and to be called for received packets.
Definition: L3IP.h:47
virtual void add_ipv6_multicast_group(const SocketAddress &address)=0
Add device to an IP6 multicast group.
virtual void set_link_input_cb(l3ip_link_input_cb_t input_cb)=0
Sets a callback that needs to be called for packets received for that interface.
SocketAddress class.
Definition: SocketAddress.h:37
Callback class based on template specialization.
Definition: Callback.h:53