mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-08-14 06:22:34 +02:00
atmdev_ops::pre_send (a TX pre-processing hook) and ::send_bh (a bottom-half capable send variant) have no implementation behind them: no remaining ATM driver sets either, so vcc_sendmsg() always skipped pre_send and the raw AAL0/AAL5 paths always fell back to ->send(). The drivers that used these hooks were removed with the legacy ATM adapters. Drop both operations and the dead branches that tested for them. Link: https://patch.msgid.link/20260615194416.752559-8-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
76 lines
1.7 KiB
C
76 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/* net/atm/raw.c - Raw AAL0 and AAL5 transports */
|
|
|
|
/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
|
|
|
|
#define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/atmdev.h>
|
|
#include <linux/capability.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/skbuff.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/slab.h>
|
|
|
|
#include "common.h"
|
|
#include "protocols.h"
|
|
|
|
/*
|
|
* SKB == NULL indicates that the link is being closed
|
|
*/
|
|
|
|
static void atm_push_raw(struct atm_vcc *vcc, struct sk_buff *skb)
|
|
{
|
|
if (skb) {
|
|
struct sock *sk = sk_atm(vcc);
|
|
|
|
skb_queue_tail(&sk->sk_receive_queue, skb);
|
|
sk->sk_data_ready(sk);
|
|
}
|
|
}
|
|
|
|
static void atm_pop_raw(struct atm_vcc *vcc, struct sk_buff *skb)
|
|
{
|
|
struct sock *sk = sk_atm(vcc);
|
|
|
|
pr_debug("(%d) %d -= %d\n",
|
|
vcc->vci, sk_wmem_alloc_get(sk), ATM_SKB(skb)->acct_truesize);
|
|
atm_return_tx(vcc, skb);
|
|
dev_kfree_skb_any(skb);
|
|
sk->sk_write_space(sk);
|
|
}
|
|
|
|
static int atm_send_aal0(struct atm_vcc *vcc, struct sk_buff *skb)
|
|
{
|
|
/*
|
|
* Note that if vpi/vci are _ANY or _UNSPEC the below will
|
|
* still work
|
|
*/
|
|
if (!capable(CAP_NET_ADMIN) &&
|
|
(((u32 *)skb->data)[0] & (ATM_HDR_VPI_MASK | ATM_HDR_VCI_MASK)) !=
|
|
((vcc->vpi << ATM_HDR_VPI_SHIFT) |
|
|
(vcc->vci << ATM_HDR_VCI_SHIFT))) {
|
|
kfree_skb(skb);
|
|
return -EADDRNOTAVAIL;
|
|
}
|
|
return vcc->dev->ops->send(vcc, skb);
|
|
}
|
|
|
|
int atm_init_aal0(struct atm_vcc *vcc)
|
|
{
|
|
vcc->push = atm_push_raw;
|
|
vcc->pop = atm_pop_raw;
|
|
vcc->send = atm_send_aal0;
|
|
return 0;
|
|
}
|
|
|
|
int atm_init_aal5(struct atm_vcc *vcc)
|
|
{
|
|
vcc->push = atm_push_raw;
|
|
vcc->pop = atm_pop_raw;
|
|
vcc->send = vcc->dev->ops->send;
|
|
return 0;
|
|
}
|
|
EXPORT_SYMBOL(atm_init_aal5);
|