• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/ustp/config.c

  1 /*
  2  * ustp - OpenWrt STP/RSTP/MSTP daemon
  3  * Copyright (C) 2021 Felix Fietkau <nbd@nbd.name>
  4  *
  5  * This program is free software; you can redistribute it and/or modify
  6  * it under the terms of the GNU General Public License version 2
  7  * as published by the Free Software Foundation
  8  *
  9  * This program is distributed in the hope that it will be useful,
 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 12  * GNU General Public License for more details.
 13  */
 14 #include <string.h>
 15 
 16 #include <libubox/avl-cmp.h>
 17 #include <libubox/utils.h>
 18 
 19 #include "config.h"
 20 
 21 AVL_TREE(bridge_config, avl_strcmp, false, NULL);
 22 
 23 static uint32_t bridge_config_timestamp(void)
 24 {
 25         struct timespec ts;
 26 
 27         clock_gettime(CLOCK_MONOTONIC, &ts);
 28 
 29         return ts.tv_sec;
 30 }
 31 
 32 struct bridge_config *
 33 bridge_config_get(const char *name, bool create)
 34 {
 35         struct bridge_config *cfg;
 36         char *name_buf;
 37 
 38         cfg = avl_find_element(&bridge_config, name, cfg, node);
 39         if (cfg)
 40                 goto out;
 41 
 42         if (!create)
 43                 return NULL;
 44 
 45         cfg = calloc_a(sizeof(*cfg), &name_buf, strlen(name) + 1);
 46         cfg->node.key = strcpy(name_buf, name);
 47         avl_insert(&bridge_config, &cfg->node);
 48 
 49 out:
 50         cfg->timestamp = bridge_config_timestamp();
 51 
 52         return cfg;
 53 }
 54 
 55 void bridge_config_expire(void)
 56 {
 57         struct bridge_config *cfg, *tmp;
 58         uint32_t ts;
 59 
 60         ts = bridge_config_timestamp();
 61         avl_for_each_element_safe(&bridge_config, cfg, node, tmp) {
 62                 if (ts - cfg->timestamp < 60)
 63                         continue;
 64 
 65                 avl_delete(&bridge_config, &cfg->node);
 66                 free(cfg);
 67         }
 68 }
 69 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt