]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/network/networkd-neighbor.h
random-util: add crypto_random_bytes_allocate_iovec()
[thirdparty/systemd.git] / src / network / networkd-neighbor.h
index 3f21a25c2f77ec6f6caf7ed96d75d386884be520..7917930bcdb844cc458a5f8ee28d157c83476ef2 100644 (file)
@@ -1,56 +1,50 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <stdbool.h>
+
 #include "sd-netlink.h"
 
 #include "conf-parser.h"
 #include "ether-addr-util.h"
 #include "in-addr-util.h"
-#include "list.h"
-#include "macro.h"
-
-typedef struct Neighbor Neighbor;
-
-#include "networkd-link.h"
-#include "networkd-network.h"
 #include "networkd-util.h"
 
-union lladdr_union {
-        struct ether_addr mac;
-        union in_addr_union ip;
-};
+typedef struct Link Link;
+typedef struct Manager Manager;
+typedef struct Network Network;
 
-struct Neighbor {
+typedef struct Neighbor {
         Network *network;
         Link *link;
-        NetworkConfigSection *section;
+        ConfigSection *section;
+        NetworkConfigSource source;
+        NetworkConfigState state;
+
+        unsigned n_ref;
 
         int family;
         union in_addr_union in_addr;
-        union lladdr_union lladdr;
-        size_t lladdr_size;
+        struct hw_addr_data ll_addr;
+} Neighbor;
 
-        LIST_FIELDS(Neighbor, neighbors);
-};
+Neighbor* neighbor_ref(Neighbor *neighbor);
+Neighbor* neighbor_unref(Neighbor *neighbor);
 
-void neighbor_free(Neighbor *neighbor);
+int neighbor_get(Link *link, const Neighbor *in, Neighbor **ret);
+int neighbor_remove(Neighbor *neighbor, Link *link);
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(Neighbor, neighbor_free);
+int network_drop_invalid_neighbors(Network *network);
 
-int neighbor_configure(Neighbor *neighbor, Link *link, link_netlink_message_handler_t callback);
-int neighbor_remove(Neighbor *neighbor, Link *link, link_netlink_message_handler_t callback);
+int link_drop_static_neighbors(Link *link);
+int link_drop_foreign_neighbors(Link *link);
+void link_foreignize_neighbors(Link *link);
 
-int neighbor_get(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret);
-int neighbor_add(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret);
-int neighbor_add_foreign(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret);
-bool neighbor_equal(const Neighbor *n1, const Neighbor *n2);
-
-int neighbor_section_verify(Neighbor *neighbor);
-
-int link_set_neighbors(Link *link);
+int link_request_static_neighbors(Link *link);
 
 int manager_rtnl_process_neighbor(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
 
+DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(Neighbor, neighbor);
+
 CONFIG_PARSER_PROTOTYPE(config_parse_neighbor_address);
-CONFIG_PARSER_PROTOTYPE(config_parse_neighbor_hwaddr);
 CONFIG_PARSER_PROTOTYPE(config_parse_neighbor_lladdr);