16d49e1aeSJan Lentfer /* 26d49e1aeSJan Lentfer * wpa_supplicant - Private copy of Linux netlink/rtnetlink definitions. 36d49e1aeSJan Lentfer * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi> 46d49e1aeSJan Lentfer * 53ff40c12SJohn Marino * This software may be distributed under the terms of the BSD license. 63ff40c12SJohn Marino * See README for more details. 76d49e1aeSJan Lentfer */ 86d49e1aeSJan Lentfer 96d49e1aeSJan Lentfer #ifndef PRIV_NETLINK_H 106d49e1aeSJan Lentfer #define PRIV_NETLINK_H 116d49e1aeSJan Lentfer 126d49e1aeSJan Lentfer /* 136d49e1aeSJan Lentfer * This should be replaced with user space header once one is available with C 146d49e1aeSJan Lentfer * library, etc.. 156d49e1aeSJan Lentfer */ 166d49e1aeSJan Lentfer 176d49e1aeSJan Lentfer #ifndef IFF_LOWER_UP 186d49e1aeSJan Lentfer #define IFF_LOWER_UP 0x10000 /* driver signals L1 up */ 196d49e1aeSJan Lentfer #endif 206d49e1aeSJan Lentfer #ifndef IFF_DORMANT 216d49e1aeSJan Lentfer #define IFF_DORMANT 0x20000 /* driver signals dormant */ 226d49e1aeSJan Lentfer #endif 236d49e1aeSJan Lentfer 246d49e1aeSJan Lentfer #ifndef IFLA_IFNAME 256d49e1aeSJan Lentfer #define IFLA_IFNAME 3 266d49e1aeSJan Lentfer #endif 276d49e1aeSJan Lentfer #ifndef IFLA_WIRELESS 286d49e1aeSJan Lentfer #define IFLA_WIRELESS 11 296d49e1aeSJan Lentfer #endif 306d49e1aeSJan Lentfer #ifndef IFLA_OPERSTATE 316d49e1aeSJan Lentfer #define IFLA_OPERSTATE 16 326d49e1aeSJan Lentfer #endif 336d49e1aeSJan Lentfer #ifndef IFLA_LINKMODE 346d49e1aeSJan Lentfer #define IFLA_LINKMODE 17 356d49e1aeSJan Lentfer #define IF_OPER_DORMANT 5 366d49e1aeSJan Lentfer #define IF_OPER_UP 6 376d49e1aeSJan Lentfer #endif 386d49e1aeSJan Lentfer 396d49e1aeSJan Lentfer #define NLM_F_REQUEST 1 406d49e1aeSJan Lentfer 416d49e1aeSJan Lentfer #define NETLINK_ROUTE 0 426d49e1aeSJan Lentfer #define RTMGRP_LINK 1 436d49e1aeSJan Lentfer #define RTM_BASE 0x10 446d49e1aeSJan Lentfer #define RTM_NEWLINK (RTM_BASE + 0) 456d49e1aeSJan Lentfer #define RTM_DELLINK (RTM_BASE + 1) 466d49e1aeSJan Lentfer #define RTM_SETLINK (RTM_BASE + 3) 476d49e1aeSJan Lentfer 486d49e1aeSJan Lentfer #define NLMSG_ALIGNTO 4 496d49e1aeSJan Lentfer #define NLMSG_ALIGN(len) (((len) + NLMSG_ALIGNTO - 1) & ~(NLMSG_ALIGNTO - 1)) 503ff40c12SJohn Marino #define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr))) 516d49e1aeSJan Lentfer #define NLMSG_LENGTH(len) ((len) + NLMSG_ALIGN(sizeof(struct nlmsghdr))) 523ff40c12SJohn Marino #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len)) 536d49e1aeSJan Lentfer #define NLMSG_DATA(nlh) ((void*) (((char*) nlh) + NLMSG_LENGTH(0))) 543ff40c12SJohn Marino #define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \ 553ff40c12SJohn Marino (struct nlmsghdr *) \ 563ff40c12SJohn Marino (((char *)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len))) 573ff40c12SJohn Marino #define NLMSG_OK(nlh,len) ((len) >= (int) sizeof(struct nlmsghdr) && \ 583ff40c12SJohn Marino (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \ 593ff40c12SJohn Marino (int) (nlh)->nlmsg_len <= (len)) 603ff40c12SJohn Marino #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len))) 616d49e1aeSJan Lentfer 626d49e1aeSJan Lentfer #define RTA_ALIGNTO 4 636d49e1aeSJan Lentfer #define RTA_ALIGN(len) (((len) + RTA_ALIGNTO - 1) & ~(RTA_ALIGNTO - 1)) 646d49e1aeSJan Lentfer #define RTA_OK(rta,len) \ 656d49e1aeSJan Lentfer ((len) > 0 && (rta)->rta_len >= sizeof(struct rtattr) && \ 666d49e1aeSJan Lentfer (rta)->rta_len <= (len)) 676d49e1aeSJan Lentfer #define RTA_NEXT(rta,attrlen) \ 686d49e1aeSJan Lentfer ((attrlen) -= RTA_ALIGN((rta)->rta_len), \ 696d49e1aeSJan Lentfer (struct rtattr *) (((char *)(rta)) + RTA_ALIGN((rta)->rta_len))) 706d49e1aeSJan Lentfer #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len)) 71*a1157835SDaniel Fojt #define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len)) 726d49e1aeSJan Lentfer #define RTA_DATA(rta) ((void *) (((char *) (rta)) + RTA_LENGTH(0))) 733ff40c12SJohn Marino #define RTA_PAYLOAD(rta) ((int) ((rta)->rta_len) - RTA_LENGTH(0)) 746d49e1aeSJan Lentfer 756d49e1aeSJan Lentfer 766d49e1aeSJan Lentfer struct sockaddr_nl 776d49e1aeSJan Lentfer { 786d49e1aeSJan Lentfer sa_family_t nl_family; 796d49e1aeSJan Lentfer unsigned short nl_pad; 806d49e1aeSJan Lentfer u32 nl_pid; 816d49e1aeSJan Lentfer u32 nl_groups; 826d49e1aeSJan Lentfer }; 836d49e1aeSJan Lentfer 846d49e1aeSJan Lentfer struct nlmsghdr 856d49e1aeSJan Lentfer { 866d49e1aeSJan Lentfer u32 nlmsg_len; 876d49e1aeSJan Lentfer u16 nlmsg_type; 886d49e1aeSJan Lentfer u16 nlmsg_flags; 896d49e1aeSJan Lentfer u32 nlmsg_seq; 906d49e1aeSJan Lentfer u32 nlmsg_pid; 916d49e1aeSJan Lentfer }; 926d49e1aeSJan Lentfer 936d49e1aeSJan Lentfer struct ifinfomsg 946d49e1aeSJan Lentfer { 956d49e1aeSJan Lentfer unsigned char ifi_family; 966d49e1aeSJan Lentfer unsigned char __ifi_pad; 976d49e1aeSJan Lentfer unsigned short ifi_type; 986d49e1aeSJan Lentfer int ifi_index; 996d49e1aeSJan Lentfer unsigned ifi_flags; 1006d49e1aeSJan Lentfer unsigned ifi_change; 1016d49e1aeSJan Lentfer }; 1026d49e1aeSJan Lentfer 1036d49e1aeSJan Lentfer struct rtattr 1046d49e1aeSJan Lentfer { 1056d49e1aeSJan Lentfer unsigned short rta_len; 1066d49e1aeSJan Lentfer unsigned short rta_type; 1076d49e1aeSJan Lentfer }; 1086d49e1aeSJan Lentfer 1096d49e1aeSJan Lentfer #endif /* PRIV_NETLINK_H */ 110