--- zzzz-none-000/linux-3.10.107/net/atm/common.c 2017-06-27 09:49:32.000000000 +0000 +++ vr9-7490-729/linux-3.10.107/net/atm/common.c 2021-11-10 11:53:56.000000000 +0000 @@ -62,11 +62,16 @@ write_unlock_irq(&vcc_sklist_lock); } +struct sk_buff* (*ifx_atm_alloc_tx)(struct atm_vcc *, unsigned int) = NULL; +EXPORT_SYMBOL(ifx_atm_alloc_tx); + static struct sk_buff *alloc_tx(struct atm_vcc *vcc, unsigned int size) { struct sk_buff *skb; struct sock *sk = sk_atm(vcc); + if ( ifx_atm_alloc_tx != NULL ) + return ifx_atm_alloc_tx(vcc, size); if (sk_wmem_alloc_get(sk) && !atm_may_send(vcc, size)) { pr_debug("Sorry: wmem_alloc = %d, size = %d, sndbuf = %d\n", sk_wmem_alloc_get(sk), size, sk->sk_sndbuf); @@ -141,6 +146,19 @@ .release_cb = vcc_release_cb, }; +#ifdef CONFIG_LTQ_OAM +int (*push_oam_pfn)(struct atm_vcc *atmvcc, void *cell) = NULL; +EXPORT_SYMBOL(push_oam_pfn); + +int ifx_push_oam(struct atm_vcc *atmvcc, void *cell) +{ + if (push_oam_pfn != NULL) + return push_oam_pfn(atmvcc, cell); + return -1; +} +EXPORT_SYMBOL(ifx_push_oam); +#endif + int vcc_create(struct net *net, struct socket *sock, int protocol, int family) { struct sock *sk; @@ -165,8 +183,13 @@ atomic_set(&sk->sk_rmem_alloc, 0); vcc->push = NULL; vcc->pop = NULL; - vcc->owner = NULL; + //AVMbk AVMmb ist das AVM code? + vcc->owner = NULL; +#ifdef CONFIG_LTQ_OAM + vcc->push_oam = ifx_push_oam; +#else vcc->push_oam = NULL; +#endif vcc->release_cb = NULL; vcc->vpi = vcc->vci = 0; /* no VCI/VPI yet */ vcc->atm_options = vcc->aal_options = 0; @@ -531,6 +554,8 @@ struct sk_buff *skb; int copied, error = -EINVAL; + msg->msg_namelen = 0; + if (sock->state != SS_CONNECTED) return -ENOTCONN; @@ -718,6 +743,9 @@ if (!tp->traffic_class || tp->traffic_class == ATM_ANYCLASS) return 0; if (tp->traffic_class != ATM_UBR && !tp->min_pcr && !tp->pcr && +#ifdef CONFIG_IFX_ATM + !tp->scr && +#endif !tp->max_pcr) return -EINVAL; if (tp->min_pcr == ATM_MAX_PCR)