]> git.meshlink.io Git - meshlink/commitdiff
Remove support for broadcast packets.
authorGuus Sliepen <guus@meshlink.io>
Mon, 14 Oct 2019 19:34:54 +0000 (21:34 +0200)
committerGuus Sliepen <guus@meshlink.io>
Mon, 14 Oct 2019 19:34:54 +0000 (21:34 +0200)
This is not used in MeshLink. Removing support for this also means we no
longer have to calculate a minimum spanning tree whenever the graph is
updated.

src/connection.h
src/graph.c
src/net.h
src/net_packet.c

index ef688549062689e6b66cac2006ee4e9b03147188..25e122d05f0726de19da9d04f665e7b11a975b31 100644 (file)
@@ -34,7 +34,7 @@ typedef struct connection_status_t {
        uint16_t pinged: 1;                 /* sent ping */
        uint16_t active: 1;                 /* 1 if active.. */
        uint16_t connecting: 1;             /* 1 if we are waiting for a non-blocking connect() to finish */
-       uint16_t mst: 1;                    /* 1 if this connection is part of a minimum spanning tree */
+       uint16_t unused: 1;
        uint16_t control: 1;                /* 1 if this is a control connection */
        uint16_t pcap: 1;                   /* 1 if this is a control connection requesting packet capture */
        uint16_t log: 1;                    /* 1 if this is a control connection requesting log dump */
index d86ac4a81e3ea560e8a14f15b9180399570d3d0a..9955ea41644721a208041de60860329158998e04 100644 (file)
 #include "xalloc.h"
 #include "graph.h"
 
-/* Implementation of Kruskal's algorithm.
-   Running time: O(EN)
-   Please note that sorting on weight is already done by add_edge().
-*/
-
-static void mst_kruskal(meshlink_handle_t *mesh) {
-       /* Clear MST status on connections */
-
-       for list_each(connection_t, c, mesh->connections) {
-               c->status.mst = false;
-       }
-
-       logger(mesh, MESHLINK_DEBUG, "Running Kruskal's algorithm:");
-
-       /* Clear visited status on nodes */
-
-       for splay_each(node_t, n, mesh->nodes) {
-               n->status.visited = false;
-       }
-
-       /* Starting point */
-
-       for splay_each(edge_t, e, mesh->edges) {
-               if(e->from->status.reachable) {
-                       e->from->status.visited = true;
-                       break;
-               }
-       }
-
-       /* Add safe edges */
-
-       bool skipped = false;
-
-       for splay_each(edge_t, e, mesh->edges) {
-               if(!e->reverse || (e->from->status.visited == e->to->status.visited)) {
-                       skipped = true;
-                       continue;
-               }
-
-               e->from->status.visited = true;
-               e->to->status.visited = true;
-
-               if(e->connection) {
-                       e->connection->status.mst = true;
-               }
-
-               if(e->reverse->connection) {
-                       e->reverse->connection->status.mst = true;
-               }
-
-               logger(mesh, MESHLINK_DEBUG, " Adding edge %s - %s weight %d", e->from->name, e->to->name, e->weight);
-
-               if(skipped) {
-                       skipped = false;
-                       next = mesh->edges->head;
-               }
-       }
-}
-
 /* Implementation of a simple breadth-first search algorithm.
    Running time: O(E)
 */
@@ -252,5 +193,4 @@ static void check_reachability(meshlink_handle_t *mesh) {
 void graph(meshlink_handle_t *mesh) {
        sssp_bfs(mesh);
        check_reachability(mesh);
-       mst_kruskal(mesh);
 }
index 8ff07088302ba08fc0067ce238bad679a46169ae..4da61bd4f2320a5abfa78c8bfd6e93df7b50017c 100644 (file)
--- a/src/net.h
+++ b/src/net.h
@@ -89,7 +89,6 @@ extern int setup_vpn_in_socket(struct meshlink_handle *mesh, const sockaddr_t *)
 extern bool send_sptps_data(void *handle, uint8_t type, const void *data, size_t len);
 extern bool receive_sptps_record(void *handle, uint8_t type, const void *data, uint16_t len);
 extern void send_packet(struct meshlink_handle *mesh, struct node_t *, struct vpn_packet_t *);
-extern void broadcast_packet(struct meshlink_handle *mesh, const struct node_t *, struct vpn_packet_t *);
 extern char *get_name(struct meshlink_handle *mesh);
 extern void load_all_nodes(struct meshlink_handle *mesh);
 extern bool setup_myself_reloadable(struct meshlink_handle *mesh);
index e4f3295af941bdd92335298c30b9c776e9b9c8dd..53228369f931dd27cb75fc0b4bb211552b900a9c 100644 (file)
@@ -477,22 +477,6 @@ void send_packet(meshlink_handle_t *mesh, node_t *n, vpn_packet_t *packet) {
        return;
 }
 
-/* Broadcast a packet using the minimum spanning tree */
-
-void broadcast_packet(meshlink_handle_t *mesh, const node_t *from, vpn_packet_t *packet) {
-       // Always give ourself a copy of the packet.
-       if(from != mesh->self) {
-               send_packet(mesh, mesh->self, packet);
-       }
-
-       logger(mesh, MESHLINK_INFO, "Broadcasting packet of %d bytes from %s", packet->len, from->name);
-
-       for list_each(connection_t, c, mesh->connections)
-               if(c->status.active && c->status.mst && c != from->nexthop->connection) {
-                       send_packet(mesh, c->node, packet);
-               }
-}
-
 static node_t *try_harder(meshlink_handle_t *mesh, const sockaddr_t *from, const vpn_packet_t *pkt) {
        node_t *n = NULL;
        bool hard = false;