Loading...
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 | /** @file * @brief Network core definitions * * Definitions for networking support. */ /* * Copyright (c) 2015 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __NET_CORE_H #define __NET_CORE_H #ifdef __cplusplus extern "C" { #endif /* Network subsystem logging helpers */ #ifdef CONFIG_NETWORKING_WITH_LOGGING #define NET_DBG(fmt, ...) printk("net: %s (%p): " fmt, __func__, \ sys_thread_self_get(), ##__VA_ARGS__) #define NET_ERR(fmt, ...) printk("net: %s: " fmt, __func__, ##__VA_ARGS__) #define NET_INFO(fmt, ...) printk("net: " fmt, ##__VA_ARGS__) #define NET_PRINT(fmt, ...) printk(fmt, ##__VA_ARGS__) #else #define NET_DBG(...) #define NET_ERR(...) #define NET_INFO(...) #define NET_PRINT(...) #endif /* CONFIG_NETWORKING_WITH_LOGGING */ struct net_buf; struct net_context; #include <misc/printk.h> #include <string.h> #include <net/net_socket.h> /** * @brief Initialize network stack. This is will be automatically called * by the OS. * * @details No harm will happen if application calls this multiple times. * * @return 0 if ok, < 0 in case of error. */ int net_init(void); struct net_driver { /** How much headroom is needed for net transport headers */ size_t head_reserve; /** Open the net transport */ int (*open)(void); /** Send data to net. The send() function should return: * 0 : If packet could not be sent. In this case buf should * not be released. * 1 : If the packet was sent successfully. In this case the buf * should be released by either the send() or some other * lower layer function. * <0: If there is an error, the buf should not be released by * send() function. */ int (*send)(struct net_buf *buf); }; /** * @brief Register a new network driver to the network stack. * * @details Only one network device can be registered at a time. * * @param drv Network driver. * * @return 0 if ok, < 0 in case of error. */ int net_register_driver(struct net_driver *drv); /** * @brief Unregister a previously registered network driver. * * @param drv Network driver. * * @details Networking will be disabled if there is no driver * available. * */ void net_unregister_driver(struct net_driver *drv); /** * @brief Set the MAC/EUI-64 address of the device. * * @details Network device driver should call this function to * tell the used MAC or EUI-64 address to the IP stack. * * @param mac MAC or EUI-64 address * @param len If len == 6, then the first parameter is interpreted * to be the MAC address and the function sets the U/L bits etc. * If the len == 8, then the value is used as is to generate the * link local IPv6 address. * * @return 0 if ok, < 0 in case of error. */ int net_set_mac(uint8_t *mac, uint8_t len); /** * @brief Send a reply packet to the message originator. * * @details Application can call this function if it has received * a network packet from peer. The application needs to write * reply data into net_buf. The app can use ip_buf_appdata(buf) and * ip_buf_appdatalen(buf) to set the application data and length. * * @param context Network context * @param buf Network buffer containing the network data. * * @return 0 if ok, < 0 in case of error. */ int net_reply(struct net_context *context, struct net_buf *buf); /* Called by driver when an IP packet has been received */ int net_recv(struct net_buf *buf); void net_context_init(void); #ifdef __cplusplus } #endif #endif /* __NET_CORE_H */ |