Loading include/net/ieee802154_netdev.h +36 −0 Original line number Diff line number Diff line Loading @@ -358,6 +358,40 @@ enum { IEEE802154_LLSEC_PARAM_COORD_SHORTADDR = 1 << 8, }; struct ieee802154_llsec_ops { int (*get_params)(struct net_device *dev, struct ieee802154_llsec_params *params); int (*set_params)(struct net_device *dev, const struct ieee802154_llsec_params *params, int changed); int (*add_key)(struct net_device *dev, const struct ieee802154_llsec_key_id *id, const struct ieee802154_llsec_key *key); int (*del_key)(struct net_device *dev, const struct ieee802154_llsec_key_id *id); int (*add_dev)(struct net_device *dev, const struct ieee802154_llsec_device *llsec_dev); int (*del_dev)(struct net_device *dev, __le64 dev_addr); int (*add_devkey)(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key); int (*del_devkey)(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key); int (*add_seclevel)(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl); int (*del_seclevel)(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl); void (*lock_table)(struct net_device *dev); void (*get_table)(struct net_device *dev, struct ieee802154_llsec_table **t); void (*unlock_table)(struct net_device *dev); }; /* * This should be located at net_device->ml_priv * Loading Loading @@ -388,6 +422,8 @@ struct ieee802154_mlme_ops { void (*get_mac_params)(struct net_device *dev, struct ieee802154_mac_params *params); struct ieee802154_llsec_ops *llsec; /* The fields below are required. */ struct wpan_phy *(*get_phy)(const struct net_device *dev); Loading net/mac802154/mac802154.h +33 −0 Original line number Diff line number Diff line Loading @@ -136,4 +136,37 @@ int mac802154_set_mac_params(struct net_device *dev, void mac802154_get_mac_params(struct net_device *dev, struct ieee802154_mac_params *params); int mac802154_get_params(struct net_device *dev, struct ieee802154_llsec_params *params); int mac802154_set_params(struct net_device *dev, const struct ieee802154_llsec_params *params, int changed); int mac802154_add_key(struct net_device *dev, const struct ieee802154_llsec_key_id *id, const struct ieee802154_llsec_key *key); int mac802154_del_key(struct net_device *dev, const struct ieee802154_llsec_key_id *id); int mac802154_add_dev(struct net_device *dev, const struct ieee802154_llsec_device *llsec_dev); int mac802154_del_dev(struct net_device *dev, __le64 dev_addr); int mac802154_add_devkey(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key); int mac802154_del_devkey(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key); int mac802154_add_seclevel(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl); int mac802154_del_seclevel(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl); void mac802154_lock_table(struct net_device *dev); void mac802154_get_table(struct net_device *dev, struct ieee802154_llsec_table **t); void mac802154_unlock_table(struct net_device *dev); #endif /* MAC802154_H */ net/mac802154/mac_cmd.c +18 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,22 @@ static struct wpan_phy *mac802154_get_phy(const struct net_device *dev) return to_phy(get_device(&priv->hw->phy->dev)); } static struct ieee802154_llsec_ops mac802154_llsec_ops = { .get_params = mac802154_get_params, .set_params = mac802154_set_params, .add_key = mac802154_add_key, .del_key = mac802154_del_key, .add_dev = mac802154_add_dev, .del_dev = mac802154_del_dev, .add_devkey = mac802154_add_devkey, .del_devkey = mac802154_del_devkey, .add_seclevel = mac802154_add_seclevel, .del_seclevel = mac802154_del_seclevel, .lock_table = mac802154_lock_table, .get_table = mac802154_get_table, .unlock_table = mac802154_unlock_table, }; struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced = { .get_phy = mac802154_get_phy, }; Loading @@ -75,6 +91,8 @@ struct ieee802154_mlme_ops mac802154_mlme_wpan = { .get_short_addr = mac802154_dev_get_short_addr, .get_dsn = mac802154_dev_get_dsn, .llsec = &mac802154_llsec_ops, .set_mac_params = mac802154_set_mac_params, .get_mac_params = mac802154_get_mac_params, }; net/mac802154/mib.c +187 −0 Original line number Diff line number Diff line Loading @@ -213,3 +213,190 @@ void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan) } else mutex_unlock(&priv->hw->phy->pib_lock); } int mac802154_get_params(struct net_device *dev, struct ieee802154_llsec_params *params) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_get_params(&priv->sec, params); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_set_params(struct net_device *dev, const struct ieee802154_llsec_params *params, int changed) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_set_params(&priv->sec, params, changed); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_add_key(struct net_device *dev, const struct ieee802154_llsec_key_id *id, const struct ieee802154_llsec_key *key) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_key_add(&priv->sec, id, key); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_del_key(struct net_device *dev, const struct ieee802154_llsec_key_id *id) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_key_del(&priv->sec, id); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_add_dev(struct net_device *dev, const struct ieee802154_llsec_device *llsec_dev) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_dev_add(&priv->sec, llsec_dev); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_del_dev(struct net_device *dev, __le64 dev_addr) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_dev_del(&priv->sec, dev_addr); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_add_devkey(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_devkey_add(&priv->sec, device_addr, key); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_del_devkey(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_devkey_del(&priv->sec, device_addr, key); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_add_seclevel(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_seclevel_add(&priv->sec, sl); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_del_seclevel(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_seclevel_del(&priv->sec, sl); mutex_unlock(&priv->sec_mtx); return res; } void mac802154_lock_table(struct net_device *dev) { struct mac802154_sub_if_data *priv = netdev_priv(dev); BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); } void mac802154_get_table(struct net_device *dev, struct ieee802154_llsec_table **t) { struct mac802154_sub_if_data *priv = netdev_priv(dev); BUG_ON(dev->type != ARPHRD_IEEE802154); *t = &priv->sec.table; } void mac802154_unlock_table(struct net_device *dev) { struct mac802154_sub_if_data *priv = netdev_priv(dev); BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_unlock(&priv->sec_mtx); } Loading
include/net/ieee802154_netdev.h +36 −0 Original line number Diff line number Diff line Loading @@ -358,6 +358,40 @@ enum { IEEE802154_LLSEC_PARAM_COORD_SHORTADDR = 1 << 8, }; struct ieee802154_llsec_ops { int (*get_params)(struct net_device *dev, struct ieee802154_llsec_params *params); int (*set_params)(struct net_device *dev, const struct ieee802154_llsec_params *params, int changed); int (*add_key)(struct net_device *dev, const struct ieee802154_llsec_key_id *id, const struct ieee802154_llsec_key *key); int (*del_key)(struct net_device *dev, const struct ieee802154_llsec_key_id *id); int (*add_dev)(struct net_device *dev, const struct ieee802154_llsec_device *llsec_dev); int (*del_dev)(struct net_device *dev, __le64 dev_addr); int (*add_devkey)(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key); int (*del_devkey)(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key); int (*add_seclevel)(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl); int (*del_seclevel)(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl); void (*lock_table)(struct net_device *dev); void (*get_table)(struct net_device *dev, struct ieee802154_llsec_table **t); void (*unlock_table)(struct net_device *dev); }; /* * This should be located at net_device->ml_priv * Loading Loading @@ -388,6 +422,8 @@ struct ieee802154_mlme_ops { void (*get_mac_params)(struct net_device *dev, struct ieee802154_mac_params *params); struct ieee802154_llsec_ops *llsec; /* The fields below are required. */ struct wpan_phy *(*get_phy)(const struct net_device *dev); Loading
net/mac802154/mac802154.h +33 −0 Original line number Diff line number Diff line Loading @@ -136,4 +136,37 @@ int mac802154_set_mac_params(struct net_device *dev, void mac802154_get_mac_params(struct net_device *dev, struct ieee802154_mac_params *params); int mac802154_get_params(struct net_device *dev, struct ieee802154_llsec_params *params); int mac802154_set_params(struct net_device *dev, const struct ieee802154_llsec_params *params, int changed); int mac802154_add_key(struct net_device *dev, const struct ieee802154_llsec_key_id *id, const struct ieee802154_llsec_key *key); int mac802154_del_key(struct net_device *dev, const struct ieee802154_llsec_key_id *id); int mac802154_add_dev(struct net_device *dev, const struct ieee802154_llsec_device *llsec_dev); int mac802154_del_dev(struct net_device *dev, __le64 dev_addr); int mac802154_add_devkey(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key); int mac802154_del_devkey(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key); int mac802154_add_seclevel(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl); int mac802154_del_seclevel(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl); void mac802154_lock_table(struct net_device *dev); void mac802154_get_table(struct net_device *dev, struct ieee802154_llsec_table **t); void mac802154_unlock_table(struct net_device *dev); #endif /* MAC802154_H */
net/mac802154/mac_cmd.c +18 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,22 @@ static struct wpan_phy *mac802154_get_phy(const struct net_device *dev) return to_phy(get_device(&priv->hw->phy->dev)); } static struct ieee802154_llsec_ops mac802154_llsec_ops = { .get_params = mac802154_get_params, .set_params = mac802154_set_params, .add_key = mac802154_add_key, .del_key = mac802154_del_key, .add_dev = mac802154_add_dev, .del_dev = mac802154_del_dev, .add_devkey = mac802154_add_devkey, .del_devkey = mac802154_del_devkey, .add_seclevel = mac802154_add_seclevel, .del_seclevel = mac802154_del_seclevel, .lock_table = mac802154_lock_table, .get_table = mac802154_get_table, .unlock_table = mac802154_unlock_table, }; struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced = { .get_phy = mac802154_get_phy, }; Loading @@ -75,6 +91,8 @@ struct ieee802154_mlme_ops mac802154_mlme_wpan = { .get_short_addr = mac802154_dev_get_short_addr, .get_dsn = mac802154_dev_get_dsn, .llsec = &mac802154_llsec_ops, .set_mac_params = mac802154_set_mac_params, .get_mac_params = mac802154_get_mac_params, };
net/mac802154/mib.c +187 −0 Original line number Diff line number Diff line Loading @@ -213,3 +213,190 @@ void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan) } else mutex_unlock(&priv->hw->phy->pib_lock); } int mac802154_get_params(struct net_device *dev, struct ieee802154_llsec_params *params) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_get_params(&priv->sec, params); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_set_params(struct net_device *dev, const struct ieee802154_llsec_params *params, int changed) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_set_params(&priv->sec, params, changed); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_add_key(struct net_device *dev, const struct ieee802154_llsec_key_id *id, const struct ieee802154_llsec_key *key) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_key_add(&priv->sec, id, key); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_del_key(struct net_device *dev, const struct ieee802154_llsec_key_id *id) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_key_del(&priv->sec, id); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_add_dev(struct net_device *dev, const struct ieee802154_llsec_device *llsec_dev) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_dev_add(&priv->sec, llsec_dev); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_del_dev(struct net_device *dev, __le64 dev_addr) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_dev_del(&priv->sec, dev_addr); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_add_devkey(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_devkey_add(&priv->sec, device_addr, key); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_del_devkey(struct net_device *dev, __le64 device_addr, const struct ieee802154_llsec_device_key *key) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_devkey_del(&priv->sec, device_addr, key); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_add_seclevel(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_seclevel_add(&priv->sec, sl); mutex_unlock(&priv->sec_mtx); return res; } int mac802154_del_seclevel(struct net_device *dev, const struct ieee802154_llsec_seclevel *sl) { struct mac802154_sub_if_data *priv = netdev_priv(dev); int res; BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); res = mac802154_llsec_seclevel_del(&priv->sec, sl); mutex_unlock(&priv->sec_mtx); return res; } void mac802154_lock_table(struct net_device *dev) { struct mac802154_sub_if_data *priv = netdev_priv(dev); BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_lock(&priv->sec_mtx); } void mac802154_get_table(struct net_device *dev, struct ieee802154_llsec_table **t) { struct mac802154_sub_if_data *priv = netdev_priv(dev); BUG_ON(dev->type != ARPHRD_IEEE802154); *t = &priv->sec.table; } void mac802154_unlock_table(struct net_device *dev) { struct mac802154_sub_if_data *priv = netdev_priv(dev); BUG_ON(dev->type != ARPHRD_IEEE802154); mutex_unlock(&priv->sec_mtx); }