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)))
72fb79edc9df1f20461e90e478363d207348213d35Dmitry Shmidt#define RTA_PAYLOAD(rta) ((int) ((rta)->rta_len) - RTA_LENGTH(0))
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct sockaddr_nl
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	sa_family_t nl_family;
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned short nl_pad;
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 nl_pid;
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 nl_groups;
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct nlmsghdr
848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 nlmsg_len;
868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u16 nlmsg_type;
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u16 nlmsg_flags;
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 nlmsg_seq;
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 nlmsg_pid;
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ifinfomsg
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned char ifi_family;
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned char __ifi_pad;
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned short ifi_type;
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int ifi_index;
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned ifi_flags;
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned ifi_change;
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rtattr
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned short rta_len;
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned short rta_type;
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* PRIV_NETLINK_H */
109