2019-06-04 10:11:33 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2014-11-03 10:33:18 +01:00
/*
* OCB mode implementation
*
* Copyright : ( c ) 2014 Czech Technical University in Prague
* ( c ) 2014 Volkswagen Group Research
2023-08-29 12:18:56 +02:00
* Copyright ( C ) 2022 - 2023 Intel Corporation
2014-11-03 10:33:18 +01:00
* Author : Rostislav Lisovy < rostislav . lisovy @ fel . cvut . cz >
* Funded by : Volkswagen Group Research
*/
# include <linux/ieee80211.h>
# include <net/cfg80211.h>
# include "nl80211.h"
# include "core.h"
# include "rdev-ops.h"
2023-08-29 12:18:56 +02:00
int cfg80211_join_ocb ( struct cfg80211_registered_device * rdev ,
struct net_device * dev ,
struct ocb_setup * setup )
2014-11-03 10:33:18 +01:00
{
struct wireless_dev * wdev = dev - > ieee80211_ptr ;
int err ;
2023-08-29 12:18:56 +02:00
lockdep_assert_wiphy ( wdev - > wiphy ) ;
2014-11-03 10:33:18 +01:00
if ( dev - > ieee80211_ptr - > iftype ! = NL80211_IFTYPE_OCB )
return - EOPNOTSUPP ;
2015-11-09 22:02:09 +01:00
if ( ! rdev - > ops - > join_ocb )
return - EOPNOTSUPP ;
2014-11-03 10:33:18 +01:00
if ( WARN_ON ( ! setup - > chandef . chan ) )
return - EINVAL ;
err = rdev_join_ocb ( rdev , dev , setup ) ;
if ( ! err )
2022-04-14 16:50:57 +02:00
wdev - > u . ocb . chandef = setup - > chandef ;
2014-11-03 10:33:18 +01:00
return err ;
}
2023-08-29 12:18:56 +02:00
int cfg80211_leave_ocb ( struct cfg80211_registered_device * rdev ,
struct net_device * dev )
2014-11-03 10:33:18 +01:00
{
struct wireless_dev * wdev = dev - > ieee80211_ptr ;
int err ;
2023-08-29 12:18:56 +02:00
lockdep_assert_wiphy ( wdev - > wiphy ) ;
2014-11-03 10:33:18 +01:00
if ( dev - > ieee80211_ptr - > iftype ! = NL80211_IFTYPE_OCB )
return - EOPNOTSUPP ;
if ( ! rdev - > ops - > leave_ocb )
return - EOPNOTSUPP ;
2023-08-15 18:32:03 +02:00
if ( ! wdev - > u . ocb . chandef . chan )
return - ENOTCONN ;
2014-11-03 10:33:18 +01:00
err = rdev_leave_ocb ( rdev , dev ) ;
if ( ! err )
2022-04-14 16:50:57 +02:00
memset ( & wdev - > u . ocb . chandef , 0 , sizeof ( wdev - > u . ocb . chandef ) ) ;
2014-11-03 10:33:18 +01:00
return err ;
}