18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant - Private copy of Linux netlink/rtnetlink definitions. 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef PRIV_NETLINK_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define PRIV_NETLINK_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This should be replaced with user space header once one is available with C 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * library, etc.. 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef IFF_LOWER_UP 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IFF_LOWER_UP 0x10000 /* driver signals L1 up */ 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef IFF_DORMANT 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IFF_DORMANT 0x20000 /* driver signals dormant */ 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef IFLA_IFNAME 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IFLA_IFNAME 3 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef IFLA_WIRELESS 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IFLA_WIRELESS 11 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef IFLA_OPERSTATE 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IFLA_OPERSTATE 16 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef IFLA_LINKMODE 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IFLA_LINKMODE 17 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IF_OPER_DORMANT 5 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IF_OPER_UP 6 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLM_F_REQUEST 1 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NETLINK_ROUTE 0 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTMGRP_LINK 1 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTM_BASE 0x10 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTM_NEWLINK (RTM_BASE + 0) 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTM_DELLINK (RTM_BASE + 1) 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTM_SETLINK (RTM_BASE + 3) 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_ALIGNTO 4 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_ALIGN(len) (((len) + NLMSG_ALIGNTO - 1) & ~(NLMSG_ALIGNTO - 1)) 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr))) 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_LENGTH(len) ((len) + NLMSG_ALIGN(sizeof(struct nlmsghdr))) 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len)) 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_DATA(nlh) ((void*) (((char*) nlh) + NLMSG_LENGTH(0))) 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \ 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (struct nlmsghdr *) \ 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (((char *)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len))) 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_OK(nlh,len) ((len) >= (int) sizeof(struct nlmsghdr) && \ 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \ 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (int) (nlh)->nlmsg_len <= (len)) 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len))) 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTA_ALIGNTO 4 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTA_ALIGN(len) (((len) + RTA_ALIGNTO - 1) & ~(RTA_ALIGNTO - 1)) 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTA_OK(rta,len) \ 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt((len) > 0 && (rta)->rta_len >= sizeof(struct rtattr) && \ 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt(rta)->rta_len <= (len)) 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTA_NEXT(rta,attrlen) \ 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt((attrlen) -= RTA_ALIGN((rta)->rta_len), \ 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt(struct rtattr *) (((char *)(rta)) + RTA_ALIGN((rta)->rta_len))) 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len)) 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RTA_DATA(rta) ((void *) (((char *) (rta)) + RTA_LENGTH(0))) 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct sockaddr_nl 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sa_family_t nl_family; 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned short nl_pad; 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 nl_pid; 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 nl_groups; 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct nlmsghdr 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 nlmsg_len; 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 nlmsg_type; 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 nlmsg_flags; 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 nlmsg_seq; 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 nlmsg_pid; 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ifinfomsg 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned char ifi_family; 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned char __ifi_pad; 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned short ifi_type; 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ifi_index; 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned ifi_flags; 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned ifi_change; 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rtattr 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned short rta_len; 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned short rta_type; 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* PRIV_NETLINK_H */ 108