cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mib.c (5233B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright 2007-2012 Siemens AG
      4 *
      5 * Written by:
      6 * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
      7 * Sergey Lapin <slapin@ossfans.org>
      8 * Maxim Gorbachyov <maxim.gorbachev@siemens.com>
      9 * Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
     10 */
     11
     12#include <linux/if_arp.h>
     13
     14#include <net/mac802154.h>
     15#include <net/ieee802154_netdev.h>
     16#include <net/cfg802154.h>
     17
     18#include "ieee802154_i.h"
     19#include "driver-ops.h"
     20
     21void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan)
     22{
     23	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
     24	struct ieee802154_local *local = sdata->local;
     25	int res;
     26
     27	ASSERT_RTNL();
     28
     29	BUG_ON(dev->type != ARPHRD_IEEE802154);
     30
     31	res = drv_set_channel(local, page, chan);
     32	if (res) {
     33		pr_debug("set_channel failed\n");
     34	} else {
     35		local->phy->current_channel = chan;
     36		local->phy->current_page = page;
     37	}
     38}
     39
     40int mac802154_get_params(struct net_device *dev,
     41			 struct ieee802154_llsec_params *params)
     42{
     43	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
     44	int res;
     45
     46	BUG_ON(dev->type != ARPHRD_IEEE802154);
     47
     48	mutex_lock(&sdata->sec_mtx);
     49	res = mac802154_llsec_get_params(&sdata->sec, params);
     50	mutex_unlock(&sdata->sec_mtx);
     51
     52	return res;
     53}
     54
     55int mac802154_set_params(struct net_device *dev,
     56			 const struct ieee802154_llsec_params *params,
     57			 int changed)
     58{
     59	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
     60	int res;
     61
     62	BUG_ON(dev->type != ARPHRD_IEEE802154);
     63
     64	mutex_lock(&sdata->sec_mtx);
     65	res = mac802154_llsec_set_params(&sdata->sec, params, changed);
     66	mutex_unlock(&sdata->sec_mtx);
     67
     68	return res;
     69}
     70
     71int mac802154_add_key(struct net_device *dev,
     72		      const struct ieee802154_llsec_key_id *id,
     73		      const struct ieee802154_llsec_key *key)
     74{
     75	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
     76	int res;
     77
     78	BUG_ON(dev->type != ARPHRD_IEEE802154);
     79
     80	mutex_lock(&sdata->sec_mtx);
     81	res = mac802154_llsec_key_add(&sdata->sec, id, key);
     82	mutex_unlock(&sdata->sec_mtx);
     83
     84	return res;
     85}
     86
     87int mac802154_del_key(struct net_device *dev,
     88		      const struct ieee802154_llsec_key_id *id)
     89{
     90	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
     91	int res;
     92
     93	BUG_ON(dev->type != ARPHRD_IEEE802154);
     94
     95	mutex_lock(&sdata->sec_mtx);
     96	res = mac802154_llsec_key_del(&sdata->sec, id);
     97	mutex_unlock(&sdata->sec_mtx);
     98
     99	return res;
    100}
    101
    102int mac802154_add_dev(struct net_device *dev,
    103		      const struct ieee802154_llsec_device *llsec_dev)
    104{
    105	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    106	int res;
    107
    108	BUG_ON(dev->type != ARPHRD_IEEE802154);
    109
    110	mutex_lock(&sdata->sec_mtx);
    111	res = mac802154_llsec_dev_add(&sdata->sec, llsec_dev);
    112	mutex_unlock(&sdata->sec_mtx);
    113
    114	return res;
    115}
    116
    117int mac802154_del_dev(struct net_device *dev, __le64 dev_addr)
    118{
    119	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    120	int res;
    121
    122	BUG_ON(dev->type != ARPHRD_IEEE802154);
    123
    124	mutex_lock(&sdata->sec_mtx);
    125	res = mac802154_llsec_dev_del(&sdata->sec, dev_addr);
    126	mutex_unlock(&sdata->sec_mtx);
    127
    128	return res;
    129}
    130
    131int mac802154_add_devkey(struct net_device *dev,
    132			 __le64 device_addr,
    133			 const struct ieee802154_llsec_device_key *key)
    134{
    135	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    136	int res;
    137
    138	BUG_ON(dev->type != ARPHRD_IEEE802154);
    139
    140	mutex_lock(&sdata->sec_mtx);
    141	res = mac802154_llsec_devkey_add(&sdata->sec, device_addr, key);
    142	mutex_unlock(&sdata->sec_mtx);
    143
    144	return res;
    145}
    146
    147int mac802154_del_devkey(struct net_device *dev,
    148			 __le64 device_addr,
    149			 const struct ieee802154_llsec_device_key *key)
    150{
    151	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    152	int res;
    153
    154	BUG_ON(dev->type != ARPHRD_IEEE802154);
    155
    156	mutex_lock(&sdata->sec_mtx);
    157	res = mac802154_llsec_devkey_del(&sdata->sec, device_addr, key);
    158	mutex_unlock(&sdata->sec_mtx);
    159
    160	return res;
    161}
    162
    163int mac802154_add_seclevel(struct net_device *dev,
    164			   const struct ieee802154_llsec_seclevel *sl)
    165{
    166	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    167	int res;
    168
    169	BUG_ON(dev->type != ARPHRD_IEEE802154);
    170
    171	mutex_lock(&sdata->sec_mtx);
    172	res = mac802154_llsec_seclevel_add(&sdata->sec, sl);
    173	mutex_unlock(&sdata->sec_mtx);
    174
    175	return res;
    176}
    177
    178int mac802154_del_seclevel(struct net_device *dev,
    179			   const struct ieee802154_llsec_seclevel *sl)
    180{
    181	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    182	int res;
    183
    184	BUG_ON(dev->type != ARPHRD_IEEE802154);
    185
    186	mutex_lock(&sdata->sec_mtx);
    187	res = mac802154_llsec_seclevel_del(&sdata->sec, sl);
    188	mutex_unlock(&sdata->sec_mtx);
    189
    190	return res;
    191}
    192
    193void mac802154_lock_table(struct net_device *dev)
    194{
    195	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    196
    197	BUG_ON(dev->type != ARPHRD_IEEE802154);
    198
    199	mutex_lock(&sdata->sec_mtx);
    200}
    201
    202void mac802154_get_table(struct net_device *dev,
    203			 struct ieee802154_llsec_table **t)
    204{
    205	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    206
    207	BUG_ON(dev->type != ARPHRD_IEEE802154);
    208
    209	*t = &sdata->sec.table;
    210}
    211
    212void mac802154_unlock_table(struct net_device *dev)
    213{
    214	struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
    215
    216	BUG_ON(dev->type != ARPHRD_IEEE802154);
    217
    218	mutex_unlock(&sdata->sec_mtx);
    219}