📄 ar-internal.h
字号:
*/struct rxkad_key { u16 security_index; /* RxRPC header security index */ u16 ticket_len; /* length of ticket[] */ u32 expiry; /* time at which expires */ u32 kvno; /* key version number */ u8 session_key[8]; /* DES session key */ u8 ticket[0]; /* the encrypted ticket */};struct rxrpc_key_payload { struct rxkad_key k;};/* * locally abort an RxRPC call */static inline void rxrpc_abort_call(struct rxrpc_call *call, u32 abort_code){ write_lock_bh(&call->state_lock); if (call->state < RXRPC_CALL_COMPLETE) { call->abort_code = abort_code; call->state = RXRPC_CALL_LOCALLY_ABORTED; set_bit(RXRPC_CALL_ABORT, &call->events); } write_unlock_bh(&call->state_lock);}/* * af_rxrpc.c */extern atomic_t rxrpc_n_skbs;extern __be32 rxrpc_epoch;extern atomic_t rxrpc_debug_id;extern struct workqueue_struct *rxrpc_workqueue;/* * ar-accept.c */extern void rxrpc_accept_incoming_calls(struct work_struct *);extern struct rxrpc_call *rxrpc_accept_call(struct rxrpc_sock *, unsigned long);extern int rxrpc_reject_call(struct rxrpc_sock *);/* * ar-ack.c */extern void __rxrpc_propose_ACK(struct rxrpc_call *, uint8_t, __be32, bool);extern void rxrpc_propose_ACK(struct rxrpc_call *, uint8_t, __be32, bool);extern void rxrpc_process_call(struct work_struct *);/* * ar-call.c */extern struct kmem_cache *rxrpc_call_jar;extern struct list_head rxrpc_calls;extern rwlock_t rxrpc_call_lock;extern struct rxrpc_call *rxrpc_get_client_call(struct rxrpc_sock *, struct rxrpc_transport *, struct rxrpc_conn_bundle *, unsigned long, int, gfp_t);extern struct rxrpc_call *rxrpc_incoming_call(struct rxrpc_sock *, struct rxrpc_connection *, struct rxrpc_header *, gfp_t);extern struct rxrpc_call *rxrpc_find_server_call(struct rxrpc_sock *, unsigned long);extern void rxrpc_release_call(struct rxrpc_call *);extern void rxrpc_release_calls_on_socket(struct rxrpc_sock *);extern void __rxrpc_put_call(struct rxrpc_call *);extern void __exit rxrpc_destroy_all_calls(void);/* * ar-connection.c */extern struct list_head rxrpc_connections;extern rwlock_t rxrpc_connection_lock;extern struct rxrpc_conn_bundle *rxrpc_get_bundle(struct rxrpc_sock *, struct rxrpc_transport *, struct key *, __be16, gfp_t);extern void rxrpc_put_bundle(struct rxrpc_transport *, struct rxrpc_conn_bundle *);extern int rxrpc_connect_call(struct rxrpc_sock *, struct rxrpc_transport *, struct rxrpc_conn_bundle *, struct rxrpc_call *, gfp_t);extern void rxrpc_put_connection(struct rxrpc_connection *);extern void __exit rxrpc_destroy_all_connections(void);extern struct rxrpc_connection *rxrpc_find_connection(struct rxrpc_transport *, struct rxrpc_header *);extern struct rxrpc_connection *rxrpc_incoming_connection(struct rxrpc_transport *, struct rxrpc_header *, gfp_t);/* * ar-connevent.c */extern void rxrpc_process_connection(struct work_struct *);extern void rxrpc_reject_packet(struct rxrpc_local *, struct sk_buff *);extern void rxrpc_reject_packets(struct work_struct *);/* * ar-error.c */extern void rxrpc_UDP_error_report(struct sock *);extern void rxrpc_UDP_error_handler(struct work_struct *);/* * ar-input.c */extern unsigned long rxrpc_ack_timeout;extern const char *rxrpc_pkts[];extern void rxrpc_data_ready(struct sock *, int);extern int rxrpc_queue_rcv_skb(struct rxrpc_call *, struct sk_buff *, bool, bool);extern void rxrpc_fast_process_packet(struct rxrpc_call *, struct sk_buff *);/* * ar-local.c */extern rwlock_t rxrpc_local_lock;extern struct rxrpc_local *rxrpc_lookup_local(struct sockaddr_rxrpc *);extern void rxrpc_put_local(struct rxrpc_local *);extern void __exit rxrpc_destroy_all_locals(void);/* * ar-key.c */extern struct key_type key_type_rxrpc;extern struct key_type key_type_rxrpc_s;extern int rxrpc_request_key(struct rxrpc_sock *, char __user *, int);extern int rxrpc_server_keyring(struct rxrpc_sock *, char __user *, int);extern int rxrpc_get_server_data_key(struct rxrpc_connection *, const void *, time_t, u32);/* * ar-output.c */extern int rxrpc_resend_timeout;extern int rxrpc_send_packet(struct rxrpc_transport *, struct sk_buff *);extern int rxrpc_client_sendmsg(struct kiocb *, struct rxrpc_sock *, struct rxrpc_transport *, struct msghdr *, size_t);extern int rxrpc_server_sendmsg(struct kiocb *, struct rxrpc_sock *, struct msghdr *, size_t);/* * ar-peer.c */extern struct rxrpc_peer *rxrpc_get_peer(struct sockaddr_rxrpc *, gfp_t);extern void rxrpc_put_peer(struct rxrpc_peer *);extern struct rxrpc_peer *rxrpc_find_peer(struct rxrpc_local *, __be32, __be16);extern void __exit rxrpc_destroy_all_peers(void);/* * ar-proc.c */extern const char *rxrpc_call_states[];extern struct file_operations rxrpc_call_seq_fops;extern struct file_operations rxrpc_connection_seq_fops;/* * ar-recvmsg.c */extern void rxrpc_remove_user_ID(struct rxrpc_sock *, struct rxrpc_call *);extern int rxrpc_recvmsg(struct kiocb *, struct socket *, struct msghdr *, size_t, int);/* * ar-security.c */extern int rxrpc_register_security(struct rxrpc_security *);extern void rxrpc_unregister_security(struct rxrpc_security *);extern int rxrpc_init_client_conn_security(struct rxrpc_connection *);extern int rxrpc_init_server_conn_security(struct rxrpc_connection *);extern int rxrpc_secure_packet(const struct rxrpc_call *, struct sk_buff *, size_t, void *);extern int rxrpc_verify_packet(const struct rxrpc_call *, struct sk_buff *, u32 *);extern void rxrpc_clear_conn_security(struct rxrpc_connection *);/* * ar-skbuff.c */extern void rxrpc_packet_destructor(struct sk_buff *);/* * ar-transport.c */extern struct rxrpc_transport *rxrpc_get_transport(struct rxrpc_local *, struct rxrpc_peer *, gfp_t);extern void rxrpc_put_transport(struct rxrpc_transport *);extern void __exit rxrpc_destroy_all_transports(void);extern struct rxrpc_transport *rxrpc_find_transport(struct rxrpc_local *, struct rxrpc_peer *);/* * debug tracing */extern unsigned rxrpc_debug;#define dbgprintk(FMT,...) \ printk("[%x%-6.6s] "FMT"\n", smp_processor_id(), current->comm ,##__VA_ARGS__)/* make sure we maintain the format strings, even when debugging is disabled */static inline __attribute__((format(printf,1,2)))void _dbprintk(const char *fmt, ...){}#define kenter(FMT,...) dbgprintk("==> %s("FMT")",__FUNCTION__ ,##__VA_ARGS__)#define kleave(FMT,...) dbgprintk("<== %s()"FMT"",__FUNCTION__ ,##__VA_ARGS__)#define kdebug(FMT,...) dbgprintk(" "FMT ,##__VA_ARGS__)#define kproto(FMT,...) dbgprintk("### "FMT ,##__VA_ARGS__)#define knet(FMT,...) dbgprintk("@@@ "FMT ,##__VA_ARGS__)#if defined(__KDEBUG)#define _enter(FMT,...) kenter(FMT,##__VA_ARGS__)#define _leave(FMT,...) kleave(FMT,##__VA_ARGS__)#define _debug(FMT,...) kdebug(FMT,##__VA_ARGS__)#define _proto(FMT,...) kproto(FMT,##__VA_ARGS__)#define _net(FMT,...) knet(FMT,##__VA_ARGS__)#elif defined(CONFIG_AF_RXRPC_DEBUG)#define RXRPC_DEBUG_KENTER 0x01#define RXRPC_DEBUG_KLEAVE 0x02#define RXRPC_DEBUG_KDEBUG 0x04#define RXRPC_DEBUG_KPROTO 0x08#define RXRPC_DEBUG_KNET 0x10#define _enter(FMT,...) \do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KENTER)) \ kenter(FMT,##__VA_ARGS__); \} while (0)#define _leave(FMT,...) \do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KLEAVE)) \ kleave(FMT,##__VA_ARGS__); \} while (0)#define _debug(FMT,...) \do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KDEBUG)) \ kdebug(FMT,##__VA_ARGS__); \} while (0)#define _proto(FMT,...) \do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KPROTO)) \ kproto(FMT,##__VA_ARGS__); \} while (0)#define _net(FMT,...) \do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KNET)) \ knet(FMT,##__VA_ARGS__); \} while (0)#else#define _enter(FMT,...) _dbprintk("==> %s("FMT")",__FUNCTION__ ,##__VA_ARGS__)#define _leave(FMT,...) _dbprintk("<== %s()"FMT"",__FUNCTION__ ,##__VA_ARGS__)#define _debug(FMT,...) _dbprintk(" "FMT ,##__VA_ARGS__)#define _proto(FMT,...) _dbprintk("### "FMT ,##__VA_ARGS__)#define _net(FMT,...) _dbprintk("@@@ "FMT ,##__VA_ARGS__)#endif/* * debug assertion checking */#if 1 // defined(__KDEBUGALL)#define ASSERT(X) \do { \ if (unlikely(!(X))) { \ printk(KERN_ERR "\n"); \ printk(KERN_ERR "RxRPC: Assertion failed\n"); \ BUG(); \ } \} while(0)#define ASSERTCMP(X, OP, Y) \do { \ if (unlikely(!((X) OP (Y)))) { \ printk(KERN_ERR "\n"); \ printk(KERN_ERR "RxRPC: Assertion failed\n"); \ printk(KERN_ERR "%lu " #OP " %lu is false\n", \ (unsigned long)(X), (unsigned long)(Y)); \ printk(KERN_ERR "0x%lx " #OP " 0x%lx is false\n", \ (unsigned long)(X), (unsigned long)(Y)); \ BUG(); \ } \} while(0)#define ASSERTIF(C, X) \do { \ if (unlikely((C) && !(X))) { \ printk(KERN_ERR "\n"); \ printk(KERN_ERR "RxRPC: Assertion failed\n"); \ BUG(); \ } \} while(0)#define ASSERTIFCMP(C, X, OP, Y) \do { \ if (unlikely((C) && !((X) OP (Y)))) { \ printk(KERN_ERR "\n"); \ printk(KERN_ERR "RxRPC: Assertion failed\n"); \ printk(KERN_ERR "%lu " #OP " %lu is false\n", \ (unsigned long)(X), (unsigned long)(Y)); \ printk(KERN_ERR "0x%lx " #OP " 0x%lx is false\n", \ (unsigned long)(X), (unsigned long)(Y)); \ BUG(); \ } \} while(0)#else#define ASSERT(X) \do { \} while(0)#define ASSERTCMP(X, OP, Y) \do { \} while(0)#define ASSERTIF(C, X) \do { \} while(0)#define ASSERTIFCMP(C, X, OP, Y) \do { \} while(0)#endif /* __KDEBUGALL *//* * socket buffer accounting / leak finding */static inline void __rxrpc_new_skb(struct sk_buff *skb, const char *fn){ //_net("new skb %p %s [%d]", skb, fn, atomic_read(&rxrpc_n_skbs)); //atomic_inc(&rxrpc_n_skbs);}#define rxrpc_new_skb(skb) __rxrpc_new_skb((skb), __func__)static inline void __rxrpc_kill_skb(struct sk_buff *skb, const char *fn){ //_net("kill skb %p %s [%d]", skb, fn, atomic_read(&rxrpc_n_skbs)); //atomic_dec(&rxrpc_n_skbs);}#define rxrpc_kill_skb(skb) __rxrpc_kill_skb((skb), __func__)static inline void __rxrpc_free_skb(struct sk_buff *skb, const char *fn){ if (skb) { CHECK_SLAB_OKAY(&skb->users); //_net("free skb %p %s [%d]", // skb, fn, atomic_read(&rxrpc_n_skbs)); //atomic_dec(&rxrpc_n_skbs); kfree_skb(skb); }}#define rxrpc_free_skb(skb) __rxrpc_free_skb((skb), __func__)static inline void rxrpc_purge_queue(struct sk_buff_head *list){ struct sk_buff *skb; while ((skb = skb_dequeue((list))) != NULL) rxrpc_free_skb(skb);}static inline void __rxrpc_get_local(struct rxrpc_local *local, const char *f){ CHECK_SLAB_OKAY(&local->usage); if (atomic_inc_return(&local->usage) == 1) printk("resurrected (%s)\n", f);}#define rxrpc_get_local(LOCAL) __rxrpc_get_local((LOCAL), __func__)#define rxrpc_get_call(CALL) \do { \ CHECK_SLAB_OKAY(&(CALL)->usage); \ if (atomic_inc_return(&(CALL)->usage) == 1) \ BUG(); \} while(0)#define rxrpc_put_call(CALL) \do { \ __rxrpc_put_call(CALL); \} while(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -