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