2019-05-29 16:57:50 -07:00
/* SPDX-License-Identifier: GPL-2.0-only */
2008-09-22 20:02:10 -07:00
/*
* File : af_phonet . h
*
* Phonet sockets kernel definitions
*
* Copyright ( C ) 2008 Nokia Corporation .
*/
# ifndef AF_PHONET_H
# define AF_PHONET_H
/*
* The lower layers may not require more space , ever . Make sure it ' s
* enough .
*/
2008-10-26 23:06:31 -07:00
# define MAX_PHONET_HEADER (8 + MAX_HEADER)
2008-09-22 20:02:10 -07:00
2008-09-22 20:05:19 -07:00
/*
* Every Phonet * socket has this structure first in its
* protocol - specific structure under name c .
*/
struct pn_sock {
struct sock sk ;
u16 sobject ;
2011-02-24 23:14:57 +00:00
u16 dobject ;
2008-09-22 20:05:19 -07:00
u8 resource ;
} ;
static inline struct pn_sock * pn_sk ( struct sock * sk )
{
return ( struct pn_sock * ) sk ;
}
extern const struct proto_ops phonet_dgram_ops ;
2009-11-09 02:17:01 +00:00
void pn_sock_init ( void ) ;
2008-12-03 15:42:56 -08:00
struct sock * pn_find_sock_by_sa ( struct net * net , const struct sockaddr_pn * sa ) ;
2009-10-14 00:48:27 +00:00
void pn_deliver_sock_broadcast ( struct net * net , struct sk_buff * skb ) ;
2008-09-22 20:08:39 -07:00
void phonet_get_local_port_range ( int * min , int * max ) ;
2016-02-10 11:50:35 -05:00
int pn_sock_hash ( struct sock * sk ) ;
2008-09-22 20:05:19 -07:00
void pn_sock_unhash ( struct sock * sk ) ;
int pn_sock_get_port ( struct sock * sk , unsigned short sport ) ;
2010-09-15 12:30:11 +00:00
struct sock * pn_find_sock_by_res ( struct net * net , u8 res ) ;
int pn_sock_bind_res ( struct sock * sock , u8 res ) ;
int pn_sock_unbind_res ( struct sock * sk , u8 res ) ;
void pn_sock_unbind_all_res ( struct sock * sk ) ;
2008-09-22 20:05:57 -07:00
int pn_skb_send ( struct sock * sk , struct sk_buff * skb ,
const struct sockaddr_pn * target ) ;
2008-09-22 20:02:10 -07:00
static inline struct phonethdr * pn_hdr ( struct sk_buff * skb )
{
return ( struct phonethdr * ) skb_network_header ( skb ) ;
}
2008-09-22 20:09:13 -07:00
static inline struct phonetmsg * pn_msg ( struct sk_buff * skb )
{
return ( struct phonetmsg * ) skb_transport_header ( skb ) ;
}
2008-09-22 20:02:10 -07:00
/*
* Get the other party ' s sockaddr from received skb . The skb begins
* with a Phonet header .
*/
static inline
void pn_skb_get_src_sockaddr ( struct sk_buff * skb , struct sockaddr_pn * sa )
{
struct phonethdr * ph = pn_hdr ( skb ) ;
u16 obj = pn_object ( ph - > pn_sdev , ph - > pn_sobj ) ;
sa - > spn_family = AF_PHONET ;
pn_sockaddr_set_object ( sa , obj ) ;
pn_sockaddr_set_resource ( sa , ph - > pn_res ) ;
memset ( sa - > spn_zero , 0 , sizeof ( sa - > spn_zero ) ) ;
}
static inline
void pn_skb_get_dst_sockaddr ( struct sk_buff * skb , struct sockaddr_pn * sa )
{
struct phonethdr * ph = pn_hdr ( skb ) ;
u16 obj = pn_object ( ph - > pn_rdev , ph - > pn_robj ) ;
sa - > spn_family = AF_PHONET ;
pn_sockaddr_set_object ( sa , obj ) ;
pn_sockaddr_set_resource ( sa , ph - > pn_res ) ;
memset ( sa - > spn_zero , 0 , sizeof ( sa - > spn_zero ) ) ;
}
/* Protocols in Phonet protocol family. */
struct phonet_protocol {
2008-09-22 20:05:19 -07:00
const struct proto_ops * ops ;
2008-09-22 20:02:10 -07:00
struct proto * prot ;
int sock_type ;
} ;
2017-10-06 01:40:35 +08:00
int phonet_proto_register ( unsigned int protocol ,
const struct phonet_protocol * pp ) ;
void phonet_proto_unregister ( unsigned int protocol ,
const struct phonet_protocol * pp ) ;
2008-09-22 20:02:10 -07:00
2008-09-22 20:08:39 -07:00
int phonet_sysctl_init ( void ) ;
void phonet_sysctl_exit ( void ) ;
2008-09-22 20:05:57 -07:00
int isi_register ( void ) ;
void isi_unregister ( void ) ;
2008-09-22 20:02:10 -07:00
# endif