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

Sources/netifd/utils.h

  1 /*
  2  * netifd - network interface daemon
  3  * Copyright (C) 2012 Felix Fietkau <nbd@openwrt.org>
  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 #ifndef __NETIFD_UTILS_H
 15 #define __NETIFD_UTILS_H
 16 
 17 #include <unistd.h>
 18 #include <stdio.h>
 19 #include <uci_blob.h>
 20 #include <libubox/list.h>
 21 #include <libubox/avl.h>
 22 #include <libubox/avl-cmp.h>
 23 #include <libubox/blobmsg.h>
 24 #include <libubox/vlist.h>
 25 #include <libubox/utils.h>
 26 
 27 static inline bool blobmsg_get_bool_default(struct blob_attr *attr, bool val)
 28 {
 29         if (!attr)
 30                 return val;
 31 
 32         return blobmsg_get_bool(attr);
 33 }
 34 
 35 #define __init __attribute__((constructor))
 36 
 37 struct vlist_simple_tree {
 38         struct list_head list;
 39         int head_offset;
 40         int version;
 41 };
 42 
 43 struct vlist_simple_node {
 44         struct list_head list;
 45         int version;
 46 };
 47 
 48 #define vlist_for_each_element_safe(tree, element, node_member, ptr) \
 49         avl_for_each_element_safe(&(tree)->avl, element, node_member.avl, ptr)
 50 
 51 #define vlist_simple_init(tree, node, member) \
 52         __vlist_simple_init(tree, offsetof(node, member))
 53 
 54 void __vlist_simple_init(struct vlist_simple_tree *tree, int offset);
 55 void vlist_simple_delete(struct vlist_simple_tree *tree, struct vlist_simple_node *node);
 56 void vlist_simple_flush(struct vlist_simple_tree *tree);
 57 void vlist_simple_flush_all(struct vlist_simple_tree *tree);
 58 void vlist_simple_replace(struct vlist_simple_tree *dest, struct vlist_simple_tree *old);
 59 
 60 static inline void vlist_simple_update(struct vlist_simple_tree *tree)
 61 {
 62         tree->version++;
 63 }
 64 
 65 static inline void vlist_simple_add(struct vlist_simple_tree *tree, struct vlist_simple_node *node)
 66 {
 67         node->version = tree->version;
 68         list_add_tail(&node->list, &tree->list);
 69 }
 70 
 71 #define vlist_simple_for_each_element(tree, element, node_member) \
 72         list_for_each_entry(element, &(tree)->list, node_member.list)
 73 
 74 #define vlist_simple_empty(tree) \
 75         list_empty(&(tree)->list)
 76 
 77 
 78 #ifdef __linux__
 79 static inline int fls(int x)
 80 {
 81     int r = 32;
 82 
 83     if (!x)
 84         return 0;
 85     if (!(x & 0xffff0000u)) {
 86         x <<= 16;
 87         r -= 16;
 88     }
 89     if (!(x & 0xff000000u)) {
 90         x <<= 8;
 91         r -= 8;
 92     }
 93     if (!(x & 0xf0000000u)) {
 94         x <<= 4;
 95         r -= 4;
 96     }
 97     if (!(x & 0xc0000000u)) {
 98         x <<= 2;
 99         r -= 2;
100     }
101     if (!(x & 0x80000000u))
102         r -= 1;
103     return r;
104 }
105 #endif
106 
107 unsigned int parse_netmask_string(const char *str, bool v6);
108 bool split_netmask(char *str, unsigned int *netmask, bool v6);
109 int parse_ip_and_netmask(int af, const char *str, void *addr, unsigned int *netmask);
110 bool check_pid_path(int pid, const char *exe);
111 
112 char * format_macaddr(uint8_t *mac);
113 
114 uint32_t crc32_file(FILE *fp);
115 
116 const char * uci_get_validate_string(const struct uci_blob_param_list *p, int i);
117 
118 #ifdef __APPLE__
119 #define s6_addr32       __u6_addr.__u6_addr32
120 #endif
121 
122 #endif
123 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt