Line data Source code
1 1 : /** @file
2 : @brief UDP utility functions
3 : */
4 :
5 : /*
6 : * Copyright (c) 2017 Intel Corporation
7 : *
8 : * SPDX-License-Identifier: Apache-2.0
9 : */
10 :
11 : #ifndef ZEPHYR_INCLUDE_NET_UDP_H_
12 : #define ZEPHYR_INCLUDE_NET_UDP_H_
13 :
14 : #include <zephyr/types.h>
15 :
16 : #include <zephyr/net/net_core.h>
17 : #include <zephyr/net/net_ip.h>
18 : #include <zephyr/net/net_pkt.h>
19 :
20 : #ifdef __cplusplus
21 : extern "C" {
22 : #endif
23 :
24 : /* These APIs are mostly meant for Zephyr internal use so do not generate
25 : * documentation for them.
26 : */
27 : /** @cond INTERNAL_HIDDEN */
28 :
29 : /**
30 : * @brief UDP library
31 : * @defgroup udp UDP Library
32 : * @ingroup networking
33 : * @{
34 : */
35 :
36 : /**
37 : * @brief Get UDP packet header data from net_pkt.
38 : *
39 : * @details The values in the returned header are in network byte order.
40 : * Note that you must access the UDP header values by the returned pointer,
41 : * the hdr parameter is just a placeholder for the header data and it might
42 : * not contain anything if the header fits properly in the first fragment of
43 : * the network packet.
44 : *
45 : * @param pkt Network packet
46 : * @param hdr Where to place the header if it does not fit in first fragment
47 : * of the network packet. This might not be populated if UDP header fits in
48 : * net_buf fragment.
49 : *
50 : * @return Return pointer to header or NULL if something went wrong.
51 : * Always use the returned pointer to access the UDP header.
52 : */
53 : #if defined(CONFIG_NET_UDP)
54 : struct net_udp_hdr *net_udp_get_hdr(struct net_pkt *pkt,
55 : struct net_udp_hdr *hdr);
56 : #else
57 : static inline struct net_udp_hdr *net_udp_get_hdr(struct net_pkt *pkt,
58 : struct net_udp_hdr *hdr)
59 : {
60 : return NULL;
61 : }
62 : #endif /* CONFIG_NET_UDP */
63 :
64 : /**
65 : * @brief Set UDP packet header data in net_pkt.
66 : *
67 : * @details The values in the header must be in network byte order.
68 : * This function is normally called after a call to net_udp_get_hdr().
69 : * The hdr parameter value should be the same that is returned by function
70 : * net_udp_get_hdr() call. Note that if the UDP header fits in first net_pkt
71 : * fragment, then this function will not do anything as your hdr parameter
72 : * was pointing directly to net_pkt.
73 : *
74 : * @param pkt Network packet
75 : * @param hdr Header data pointer that was returned by net_udp_get_hdr().
76 : *
77 : * @return Return pointer to header or NULL if something went wrong.
78 : */
79 : #if defined(CONFIG_NET_UDP)
80 : struct net_udp_hdr *net_udp_set_hdr(struct net_pkt *pkt,
81 : struct net_udp_hdr *hdr);
82 : #else
83 : static inline struct net_udp_hdr *net_udp_set_hdr(struct net_pkt *pkt,
84 : struct net_udp_hdr *hdr)
85 : {
86 : return NULL;
87 : }
88 : #endif /* CONFIG_NET_UDP */
89 :
90 : /**
91 : * @}
92 : */
93 :
94 : /** @endcond */
95 :
96 : #ifdef __cplusplus
97 : }
98 : #endif
99 :
100 : #endif /* ZEPHYR_INCLUDE_NET_UDP_H_ */
|