Back to home page

OSCL-LXR

 
 

    


0001 #ifndef __NL802154_H
0002 #define __NL802154_H
0003 /*
0004  * 802.15.4 netlink interface public header
0005  *
0006  * Copyright 2014 Alexander Aring <aar@pengutronix.de>
0007  *
0008  * Permission to use, copy, modify, and/or distribute this software for any
0009  * purpose with or without fee is hereby granted, provided that the above
0010  * copyright notice and this permission notice appear in all copies.
0011  *
0012  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
0013  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
0014  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
0015  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
0016  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
0017  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
0018  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
0019  *
0020  */
0021 
0022 #include <linux/types.h>
0023 
0024 #define NL802154_GENL_NAME "nl802154"
0025 
0026 enum nl802154_commands {
0027 /* don't change the order or add anything between, this is ABI! */
0028 /* currently we don't shipping this file via uapi, ignore the above one */
0029     NL802154_CMD_UNSPEC,
0030 
0031     NL802154_CMD_GET_WPAN_PHY,      /* can dump */
0032     NL802154_CMD_SET_WPAN_PHY,
0033     NL802154_CMD_NEW_WPAN_PHY,
0034     NL802154_CMD_DEL_WPAN_PHY,
0035 
0036     NL802154_CMD_GET_INTERFACE,     /* can dump */
0037     NL802154_CMD_SET_INTERFACE,
0038     NL802154_CMD_NEW_INTERFACE,
0039     NL802154_CMD_DEL_INTERFACE,
0040 
0041     NL802154_CMD_SET_CHANNEL,
0042 
0043     NL802154_CMD_SET_PAN_ID,
0044     NL802154_CMD_SET_SHORT_ADDR,
0045 
0046     NL802154_CMD_SET_TX_POWER,
0047     NL802154_CMD_SET_CCA_MODE,
0048     NL802154_CMD_SET_CCA_ED_LEVEL,
0049 
0050     NL802154_CMD_SET_MAX_FRAME_RETRIES,
0051 
0052     NL802154_CMD_SET_BACKOFF_EXPONENT,
0053     NL802154_CMD_SET_MAX_CSMA_BACKOFFS,
0054 
0055     NL802154_CMD_SET_LBT_MODE,
0056 
0057     NL802154_CMD_SET_ACKREQ_DEFAULT,
0058 
0059     NL802154_CMD_SET_WPAN_PHY_NETNS,
0060 
0061     /* add new commands above here */
0062 
0063 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
0064     NL802154_CMD_SET_SEC_PARAMS,
0065     NL802154_CMD_GET_SEC_KEY,       /* can dump */
0066     NL802154_CMD_NEW_SEC_KEY,
0067     NL802154_CMD_DEL_SEC_KEY,
0068     NL802154_CMD_GET_SEC_DEV,       /* can dump */
0069     NL802154_CMD_NEW_SEC_DEV,
0070     NL802154_CMD_DEL_SEC_DEV,
0071     NL802154_CMD_GET_SEC_DEVKEY,        /* can dump */
0072     NL802154_CMD_NEW_SEC_DEVKEY,
0073     NL802154_CMD_DEL_SEC_DEVKEY,
0074     NL802154_CMD_GET_SEC_LEVEL,     /* can dump */
0075     NL802154_CMD_NEW_SEC_LEVEL,
0076     NL802154_CMD_DEL_SEC_LEVEL,
0077 #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */
0078 
0079     /* used to define NL802154_CMD_MAX below */
0080     __NL802154_CMD_AFTER_LAST,
0081     NL802154_CMD_MAX = __NL802154_CMD_AFTER_LAST - 1
0082 };
0083 
0084 enum nl802154_attrs {
0085 /* don't change the order or add anything between, this is ABI! */
0086 /* currently we don't shipping this file via uapi, ignore the above one */
0087     NL802154_ATTR_UNSPEC,
0088 
0089     NL802154_ATTR_WPAN_PHY,
0090     NL802154_ATTR_WPAN_PHY_NAME,
0091 
0092     NL802154_ATTR_IFINDEX,
0093     NL802154_ATTR_IFNAME,
0094     NL802154_ATTR_IFTYPE,
0095 
0096     NL802154_ATTR_WPAN_DEV,
0097 
0098     NL802154_ATTR_PAGE,
0099     NL802154_ATTR_CHANNEL,
0100 
0101     NL802154_ATTR_PAN_ID,
0102     NL802154_ATTR_SHORT_ADDR,
0103 
0104     NL802154_ATTR_TX_POWER,
0105 
0106     NL802154_ATTR_CCA_MODE,
0107     NL802154_ATTR_CCA_OPT,
0108     NL802154_ATTR_CCA_ED_LEVEL,
0109 
0110     NL802154_ATTR_MAX_FRAME_RETRIES,
0111 
0112     NL802154_ATTR_MAX_BE,
0113     NL802154_ATTR_MIN_BE,
0114     NL802154_ATTR_MAX_CSMA_BACKOFFS,
0115 
0116     NL802154_ATTR_LBT_MODE,
0117 
0118     NL802154_ATTR_GENERATION,
0119 
0120     NL802154_ATTR_CHANNELS_SUPPORTED,
0121     NL802154_ATTR_SUPPORTED_CHANNEL,
0122 
0123     NL802154_ATTR_EXTENDED_ADDR,
0124 
0125     NL802154_ATTR_WPAN_PHY_CAPS,
0126 
0127     NL802154_ATTR_SUPPORTED_COMMANDS,
0128 
0129     NL802154_ATTR_ACKREQ_DEFAULT,
0130 
0131     NL802154_ATTR_PAD,
0132 
0133     NL802154_ATTR_PID,
0134     NL802154_ATTR_NETNS_FD,
0135 
0136     /* add attributes here, update the policy in nl802154.c */
0137 
0138 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
0139     NL802154_ATTR_SEC_ENABLED,
0140     NL802154_ATTR_SEC_OUT_LEVEL,
0141     NL802154_ATTR_SEC_OUT_KEY_ID,
0142     NL802154_ATTR_SEC_FRAME_COUNTER,
0143 
0144     NL802154_ATTR_SEC_LEVEL,
0145     NL802154_ATTR_SEC_DEVICE,
0146     NL802154_ATTR_SEC_DEVKEY,
0147     NL802154_ATTR_SEC_KEY,
0148 #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */
0149 
0150     __NL802154_ATTR_AFTER_LAST,
0151     NL802154_ATTR_MAX = __NL802154_ATTR_AFTER_LAST - 1
0152 };
0153 
0154 enum nl802154_iftype {
0155     NL802154_IFTYPE_UNSPEC = (~(__u32)0),
0156 
0157     NL802154_IFTYPE_NODE = 0,
0158     NL802154_IFTYPE_MONITOR,
0159     NL802154_IFTYPE_COORD,
0160 
0161     /* keep last */
0162     NUM_NL802154_IFTYPES,
0163     NL802154_IFTYPE_MAX = NUM_NL802154_IFTYPES - 1
0164 };
0165 
0166 /**
0167  * enum nl802154_wpan_phy_capability_attr - wpan phy capability attributes
0168  *
0169  * @__NL802154_CAP_ATTR_INVALID: attribute number 0 is reserved
0170  * @NL802154_CAP_ATTR_CHANNELS: a nested attribute for nl802154_channel_attr
0171  * @NL802154_CAP_ATTR_TX_POWERS: a nested attribute for
0172  *  nl802154_wpan_phy_tx_power
0173  * @NL802154_CAP_ATTR_MIN_CCA_ED_LEVEL: minimum value for cca_ed_level
0174  * @NL802154_CAP_ATTR_MAX_CCA_ED_LEVEL: maxmimum value for cca_ed_level
0175  * @NL802154_CAP_ATTR_CCA_MODES: nl802154_cca_modes flags
0176  * @NL802154_CAP_ATTR_CCA_OPTS: nl802154_cca_opts flags
0177  * @NL802154_CAP_ATTR_MIN_MINBE: minimum of minbe value
0178  * @NL802154_CAP_ATTR_MAX_MINBE: maximum of minbe value
0179  * @NL802154_CAP_ATTR_MIN_MAXBE: minimum of maxbe value
0180  * @NL802154_CAP_ATTR_MAX_MINBE: maximum of maxbe value
0181  * @NL802154_CAP_ATTR_MIN_CSMA_BACKOFFS: minimum of csma backoff value
0182  * @NL802154_CAP_ATTR_MAX_CSMA_BACKOFFS: maximum of csma backoffs value
0183  * @NL802154_CAP_ATTR_MIN_FRAME_RETRIES: minimum of frame retries value
0184  * @NL802154_CAP_ATTR_MAX_FRAME_RETRIES: maximum of frame retries value
0185  * @NL802154_CAP_ATTR_IFTYPES: nl802154_iftype flags
0186  * @NL802154_CAP_ATTR_LBT: nl802154_supported_bool_states flags
0187  * @NL802154_CAP_ATTR_MAX: highest cap attribute currently defined
0188  * @__NL802154_CAP_ATTR_AFTER_LAST: internal use
0189  */
0190 enum nl802154_wpan_phy_capability_attr {
0191     __NL802154_CAP_ATTR_INVALID,
0192 
0193     NL802154_CAP_ATTR_IFTYPES,
0194 
0195     NL802154_CAP_ATTR_CHANNELS,
0196     NL802154_CAP_ATTR_TX_POWERS,
0197 
0198     NL802154_CAP_ATTR_CCA_ED_LEVELS,
0199     NL802154_CAP_ATTR_CCA_MODES,
0200     NL802154_CAP_ATTR_CCA_OPTS,
0201 
0202     NL802154_CAP_ATTR_MIN_MINBE,
0203     NL802154_CAP_ATTR_MAX_MINBE,
0204 
0205     NL802154_CAP_ATTR_MIN_MAXBE,
0206     NL802154_CAP_ATTR_MAX_MAXBE,
0207 
0208     NL802154_CAP_ATTR_MIN_CSMA_BACKOFFS,
0209     NL802154_CAP_ATTR_MAX_CSMA_BACKOFFS,
0210 
0211     NL802154_CAP_ATTR_MIN_FRAME_RETRIES,
0212     NL802154_CAP_ATTR_MAX_FRAME_RETRIES,
0213 
0214     NL802154_CAP_ATTR_LBT,
0215 
0216     /* keep last */
0217     __NL802154_CAP_ATTR_AFTER_LAST,
0218     NL802154_CAP_ATTR_MAX = __NL802154_CAP_ATTR_AFTER_LAST - 1
0219 };
0220 
0221 /**
0222  * enum nl802154_cca_modes - cca modes
0223  *
0224  * @__NL802154_CCA_INVALID: cca mode number 0 is reserved
0225  * @NL802154_CCA_ENERGY: Energy above threshold
0226  * @NL802154_CCA_CARRIER: Carrier sense only
0227  * @NL802154_CCA_ENERGY_CARRIER: Carrier sense with energy above threshold
0228  * @NL802154_CCA_ALOHA: CCA shall always report an idle medium
0229  * @NL802154_CCA_UWB_SHR: UWB preamble sense based on the SHR of a frame
0230  * @NL802154_CCA_UWB_MULTIPLEXED: UWB preamble sense based on the packet with
0231  *  the multiplexed preamble
0232  * @__NL802154_CCA_ATTR_AFTER_LAST: Internal
0233  * @NL802154_CCA_ATTR_MAX: Maximum CCA attribute number
0234  */
0235 enum nl802154_cca_modes {
0236     __NL802154_CCA_INVALID,
0237     NL802154_CCA_ENERGY,
0238     NL802154_CCA_CARRIER,
0239     NL802154_CCA_ENERGY_CARRIER,
0240     NL802154_CCA_ALOHA,
0241     NL802154_CCA_UWB_SHR,
0242     NL802154_CCA_UWB_MULTIPLEXED,
0243 
0244     /* keep last */
0245     __NL802154_CCA_ATTR_AFTER_LAST,
0246     NL802154_CCA_ATTR_MAX = __NL802154_CCA_ATTR_AFTER_LAST - 1
0247 };
0248 
0249 /**
0250  * enum nl802154_cca_opts - additional options for cca modes
0251  *
0252  * @NL802154_CCA_OPT_ENERGY_CARRIER_OR: NL802154_CCA_ENERGY_CARRIER with OR
0253  * @NL802154_CCA_OPT_ENERGY_CARRIER_AND: NL802154_CCA_ENERGY_CARRIER with AND
0254  */
0255 enum nl802154_cca_opts {
0256     NL802154_CCA_OPT_ENERGY_CARRIER_AND,
0257     NL802154_CCA_OPT_ENERGY_CARRIER_OR,
0258 
0259     /* keep last */
0260     __NL802154_CCA_OPT_ATTR_AFTER_LAST,
0261     NL802154_CCA_OPT_ATTR_MAX = __NL802154_CCA_OPT_ATTR_AFTER_LAST - 1
0262 };
0263 
0264 /**
0265  * enum nl802154_supported_bool_states - bool states for bool capability entry
0266  *
0267  * @NL802154_SUPPORTED_BOOL_FALSE: indicates to set false
0268  * @NL802154_SUPPORTED_BOOL_TRUE: indicates to set true
0269  * @__NL802154_SUPPORTED_BOOL_INVALD: reserved
0270  * @NL802154_SUPPORTED_BOOL_BOTH: indicates to set true and false
0271  * @__NL802154_SUPPORTED_BOOL_AFTER_LAST: Internal
0272  * @NL802154_SUPPORTED_BOOL_MAX: highest value for bool states
0273  */
0274 enum nl802154_supported_bool_states {
0275     NL802154_SUPPORTED_BOOL_FALSE,
0276     NL802154_SUPPORTED_BOOL_TRUE,
0277     /* to handle them in a mask */
0278     __NL802154_SUPPORTED_BOOL_INVALD,
0279     NL802154_SUPPORTED_BOOL_BOTH,
0280 
0281     /* keep last */
0282     __NL802154_SUPPORTED_BOOL_AFTER_LAST,
0283     NL802154_SUPPORTED_BOOL_MAX = __NL802154_SUPPORTED_BOOL_AFTER_LAST - 1
0284 };
0285 
0286 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
0287 
0288 enum nl802154_dev_addr_modes {
0289     NL802154_DEV_ADDR_NONE,
0290     __NL802154_DEV_ADDR_INVALID,
0291     NL802154_DEV_ADDR_SHORT,
0292     NL802154_DEV_ADDR_EXTENDED,
0293 
0294     /* keep last */
0295     __NL802154_DEV_ADDR_AFTER_LAST,
0296     NL802154_DEV_ADDR_MAX = __NL802154_DEV_ADDR_AFTER_LAST - 1
0297 };
0298 
0299 enum nl802154_dev_addr_attrs {
0300     NL802154_DEV_ADDR_ATTR_UNSPEC,
0301 
0302     NL802154_DEV_ADDR_ATTR_PAN_ID,
0303     NL802154_DEV_ADDR_ATTR_MODE,
0304     NL802154_DEV_ADDR_ATTR_SHORT,
0305     NL802154_DEV_ADDR_ATTR_EXTENDED,
0306     NL802154_DEV_ADDR_ATTR_PAD,
0307 
0308     /* keep last */
0309     __NL802154_DEV_ADDR_ATTR_AFTER_LAST,
0310     NL802154_DEV_ADDR_ATTR_MAX = __NL802154_DEV_ADDR_ATTR_AFTER_LAST - 1
0311 };
0312 
0313 enum nl802154_key_id_modes {
0314     NL802154_KEY_ID_MODE_IMPLICIT,
0315     NL802154_KEY_ID_MODE_INDEX,
0316     NL802154_KEY_ID_MODE_INDEX_SHORT,
0317     NL802154_KEY_ID_MODE_INDEX_EXTENDED,
0318 
0319     /* keep last */
0320     __NL802154_KEY_ID_MODE_AFTER_LAST,
0321     NL802154_KEY_ID_MODE_MAX = __NL802154_KEY_ID_MODE_AFTER_LAST - 1
0322 };
0323 
0324 enum nl802154_key_id_attrs {
0325     NL802154_KEY_ID_ATTR_UNSPEC,
0326 
0327     NL802154_KEY_ID_ATTR_MODE,
0328     NL802154_KEY_ID_ATTR_INDEX,
0329     NL802154_KEY_ID_ATTR_IMPLICIT,
0330     NL802154_KEY_ID_ATTR_SOURCE_SHORT,
0331     NL802154_KEY_ID_ATTR_SOURCE_EXTENDED,
0332     NL802154_KEY_ID_ATTR_PAD,
0333 
0334     /* keep last */
0335     __NL802154_KEY_ID_ATTR_AFTER_LAST,
0336     NL802154_KEY_ID_ATTR_MAX = __NL802154_KEY_ID_ATTR_AFTER_LAST - 1
0337 };
0338 
0339 enum nl802154_seclevels {
0340     NL802154_SECLEVEL_NONE,
0341     NL802154_SECLEVEL_MIC32,
0342     NL802154_SECLEVEL_MIC64,
0343     NL802154_SECLEVEL_MIC128,
0344     NL802154_SECLEVEL_ENC,
0345     NL802154_SECLEVEL_ENC_MIC32,
0346     NL802154_SECLEVEL_ENC_MIC64,
0347     NL802154_SECLEVEL_ENC_MIC128,
0348 
0349     /* keep last */
0350     __NL802154_SECLEVEL_AFTER_LAST,
0351     NL802154_SECLEVEL_MAX = __NL802154_SECLEVEL_AFTER_LAST - 1
0352 };
0353 
0354 enum nl802154_frames {
0355     NL802154_FRAME_BEACON,
0356     NL802154_FRAME_DATA,
0357     NL802154_FRAME_ACK,
0358     NL802154_FRAME_CMD,
0359 
0360     /* keep last */
0361     __NL802154_FRAME_AFTER_LAST,
0362     NL802154_FRAME_MAX = __NL802154_FRAME_AFTER_LAST - 1
0363 };
0364 
0365 enum nl802154_cmd_frames {
0366     __NL802154_CMD_FRAME_INVALID,
0367     NL802154_CMD_FRAME_ASSOC_REQUEST,
0368     NL802154_CMD_FRAME_ASSOC_RESPONSE,
0369     NL802154_CMD_FRAME_DISASSOC_NOTIFY,
0370     NL802154_CMD_FRAME_DATA_REQUEST,
0371     NL802154_CMD_FRAME_PAN_ID_CONFLICT_NOTIFY,
0372     NL802154_CMD_FRAME_ORPHAN_NOTIFY,
0373     NL802154_CMD_FRAME_BEACON_REQUEST,
0374     NL802154_CMD_FRAME_COORD_REALIGNMENT,
0375     NL802154_CMD_FRAME_GTS_REQUEST,
0376 
0377     /* keep last */
0378     __NL802154_CMD_FRAME_AFTER_LAST,
0379     NL802154_CMD_FRAME_MAX = __NL802154_CMD_FRAME_AFTER_LAST - 1
0380 };
0381 
0382 enum nl802154_seclevel_attrs {
0383     NL802154_SECLEVEL_ATTR_UNSPEC,
0384 
0385     NL802154_SECLEVEL_ATTR_LEVELS,
0386     NL802154_SECLEVEL_ATTR_FRAME,
0387     NL802154_SECLEVEL_ATTR_CMD_FRAME,
0388     NL802154_SECLEVEL_ATTR_DEV_OVERRIDE,
0389 
0390     /* keep last */
0391     __NL802154_SECLEVEL_ATTR_AFTER_LAST,
0392     NL802154_SECLEVEL_ATTR_MAX = __NL802154_SECLEVEL_ATTR_AFTER_LAST - 1
0393 };
0394 
0395 /* TODO what is this? couldn't find in mib */
0396 enum {
0397     NL802154_DEVKEY_IGNORE,
0398     NL802154_DEVKEY_RESTRICT,
0399     NL802154_DEVKEY_RECORD,
0400 
0401     /* keep last */
0402     __NL802154_DEVKEY_AFTER_LAST,
0403     NL802154_DEVKEY_MAX = __NL802154_DEVKEY_AFTER_LAST - 1
0404 };
0405 
0406 enum nl802154_dev {
0407     NL802154_DEV_ATTR_UNSPEC,
0408 
0409     NL802154_DEV_ATTR_FRAME_COUNTER,
0410     NL802154_DEV_ATTR_PAN_ID,
0411     NL802154_DEV_ATTR_SHORT_ADDR,
0412     NL802154_DEV_ATTR_EXTENDED_ADDR,
0413     NL802154_DEV_ATTR_SECLEVEL_EXEMPT,
0414     NL802154_DEV_ATTR_KEY_MODE,
0415     NL802154_DEV_ATTR_PAD,
0416 
0417     /* keep last */
0418     __NL802154_DEV_ATTR_AFTER_LAST,
0419     NL802154_DEV_ATTR_MAX = __NL802154_DEV_ATTR_AFTER_LAST - 1
0420 };
0421 
0422 enum nl802154_devkey {
0423     NL802154_DEVKEY_ATTR_UNSPEC,
0424 
0425     NL802154_DEVKEY_ATTR_FRAME_COUNTER,
0426     NL802154_DEVKEY_ATTR_EXTENDED_ADDR,
0427     NL802154_DEVKEY_ATTR_ID,
0428     NL802154_DEVKEY_ATTR_PAD,
0429 
0430     /* keep last */
0431     __NL802154_DEVKEY_ATTR_AFTER_LAST,
0432     NL802154_DEVKEY_ATTR_MAX = __NL802154_DEVKEY_ATTR_AFTER_LAST - 1
0433 };
0434 
0435 enum nl802154_key {
0436     NL802154_KEY_ATTR_UNSPEC,
0437 
0438     NL802154_KEY_ATTR_ID,
0439     NL802154_KEY_ATTR_USAGE_FRAMES,
0440     NL802154_KEY_ATTR_USAGE_CMDS,
0441     NL802154_KEY_ATTR_BYTES,
0442 
0443     /* keep last */
0444     __NL802154_KEY_ATTR_AFTER_LAST,
0445     NL802154_KEY_ATTR_MAX = __NL802154_KEY_ATTR_AFTER_LAST - 1
0446 };
0447 
0448 #define NL802154_KEY_SIZE       16
0449 #define NL802154_CMD_FRAME_NR_IDS   256
0450 
0451 #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */
0452 
0453 #endif /* __NL802154_H */