Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : #ifndef foosdradvfoo 3 : : #define foosdradvfoo 4 : : 5 : : /*** 6 : : Copyright © 2017 Intel Corporation. All rights reserved. 7 : : 8 : : systemd is free software; you can redistribute it and/or modify it 9 : : under the terms of the GNU Lesser General Public License as published by 10 : : the Free Software Foundation; either version 2.1 of the License, or 11 : : (at your option) any later version. 12 : : 13 : : systemd is distributed in the hope that it will be useful, but 14 : : WITHOUT ANY WARRANTY; without even the implied warranty of 15 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 : : Lesser General Public License for more details. 17 : : 18 : : You should have received a copy of the GNU Lesser General Public License 19 : : along with systemd; If not, see <http://www.gnu.org/licenses/>. 20 : : ***/ 21 : : 22 : : #include <inttypes.h> 23 : : #include <net/ethernet.h> 24 : : #include <netinet/in.h> 25 : : #include <sys/types.h> 26 : : 27 : : #include "_sd-common.h" 28 : : #include "sd-event.h" 29 : : #include "sd-ndisc.h" 30 : : 31 : : _SD_BEGIN_DECLARATIONS; 32 : : 33 : : #define SD_RADV_DEFAULT_MIN_TIMEOUT_USEC (200*USEC_PER_SEC) 34 : : #define SD_RADV_DEFAULT_MAX_TIMEOUT_USEC (600*USEC_PER_SEC) 35 : : 36 : : #define SD_RADV_DEFAULT_DNS_LIFETIME_USEC (3*SD_RADV_DEFAULT_MAX_TIMEOUT_USEC) 37 : : 38 : : typedef struct sd_radv sd_radv; 39 : : typedef struct sd_radv_prefix sd_radv_prefix; 40 : : 41 : : /* Router Advertisement */ 42 : : int sd_radv_new(sd_radv **ret); 43 : : sd_radv *sd_radv_ref(sd_radv *ra); 44 : : sd_radv *sd_radv_unref(sd_radv *ra); 45 : : 46 : : int sd_radv_attach_event(sd_radv *ra, sd_event *event, int64_t priority); 47 : : int sd_radv_detach_event(sd_radv *nd); 48 : : sd_event *sd_radv_get_event(sd_radv *ra); 49 : : 50 : : int sd_radv_start(sd_radv *ra); 51 : : int sd_radv_stop(sd_radv *ra); 52 : : 53 : : int sd_radv_set_ifindex(sd_radv *ra, int interface_index); 54 : : int sd_radv_set_mac(sd_radv *ra, const struct ether_addr *mac_addr); 55 : : int sd_radv_set_mtu(sd_radv *ra, uint32_t mtu); 56 : : int sd_radv_set_hop_limit(sd_radv *ra, uint8_t hop_limit); 57 : : int sd_radv_set_router_lifetime(sd_radv *ra, uint32_t router_lifetime); 58 : : int sd_radv_set_managed_information(sd_radv *ra, int managed); 59 : : int sd_radv_set_other_information(sd_radv *ra, int other); 60 : : int sd_radv_set_preference(sd_radv *ra, unsigned preference); 61 : : int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, int dynamic); 62 : : sd_radv_prefix *sd_radv_remove_prefix(sd_radv *ra, const struct in6_addr *prefix, 63 : : unsigned char prefixlen); 64 : : int sd_radv_set_rdnss(sd_radv *ra, uint32_t lifetime, 65 : : const struct in6_addr *dns, size_t n_dns); 66 : : int sd_radv_set_dnssl(sd_radv *ra, uint32_t lifetime, char **search_list); 67 : : 68 : : /* Advertised prefixes */ 69 : : int sd_radv_prefix_new(sd_radv_prefix **ret); 70 : : sd_radv_prefix *sd_radv_prefix_ref(sd_radv_prefix *ra); 71 : : sd_radv_prefix *sd_radv_prefix_unref(sd_radv_prefix *ra); 72 : : 73 : : int sd_radv_prefix_set_prefix(sd_radv_prefix *p, const struct in6_addr *in6_addr, 74 : : unsigned char prefixlen); 75 : : int sd_radv_prefix_set_onlink(sd_radv_prefix *p, int onlink); 76 : : int sd_radv_prefix_set_address_autoconfiguration(sd_radv_prefix *p, 77 : : int address_autoconfiguration); 78 : : int sd_radv_prefix_set_valid_lifetime(sd_radv_prefix *p, 79 : : uint32_t valid_lifetime); 80 : : int sd_radv_prefix_set_preferred_lifetime(sd_radv_prefix *p, 81 : : uint32_t preferred_lifetime); 82 : : 83 [ - + ]: 8 : _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_radv, sd_radv_unref); 84 [ # # ]: 0 : _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_radv_prefix, sd_radv_prefix_unref); 85 : : 86 : : _SD_END_DECLARATIONS; 87 : : 88 : : #endif