|
@@ -107,6 +107,7 @@ struct net;
|
|
|
* @skc_node: main hash linkage for various protocol lookup tables
|
|
|
* @skc_nulls_node: main hash linkage for UDP/UDP-Lite protocol
|
|
|
* @skc_refcnt: reference count
|
|
|
+ * @skc_tx_queue_mapping: tx queue number for this connection
|
|
|
* @skc_hash: hash value used with various protocol lookup tables
|
|
|
* @skc_family: network address family
|
|
|
* @skc_state: Connection state
|
|
@@ -128,6 +129,7 @@ struct sock_common {
|
|
|
struct hlist_nulls_node skc_nulls_node;
|
|
|
};
|
|
|
atomic_t skc_refcnt;
|
|
|
+ int skc_tx_queue_mapping;
|
|
|
|
|
|
unsigned int skc_hash;
|
|
|
unsigned short skc_family;
|
|
@@ -215,6 +217,7 @@ struct sock {
|
|
|
#define sk_node __sk_common.skc_node
|
|
|
#define sk_nulls_node __sk_common.skc_nulls_node
|
|
|
#define sk_refcnt __sk_common.skc_refcnt
|
|
|
+#define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping
|
|
|
|
|
|
#define sk_copy_start __sk_common.skc_hash
|
|
|
#define sk_hash __sk_common.skc_hash
|
|
@@ -1094,8 +1097,29 @@ static inline void sock_put(struct sock *sk)
|
|
|
extern int sk_receive_skb(struct sock *sk, struct sk_buff *skb,
|
|
|
const int nested);
|
|
|
|
|
|
+static inline void sk_tx_queue_set(struct sock *sk, int tx_queue)
|
|
|
+{
|
|
|
+ sk->sk_tx_queue_mapping = tx_queue;
|
|
|
+}
|
|
|
+
|
|
|
+static inline void sk_tx_queue_clear(struct sock *sk)
|
|
|
+{
|
|
|
+ sk->sk_tx_queue_mapping = -1;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int sk_tx_queue_get(const struct sock *sk)
|
|
|
+{
|
|
|
+ return sk->sk_tx_queue_mapping;
|
|
|
+}
|
|
|
+
|
|
|
+static inline bool sk_tx_queue_recorded(const struct sock *sk)
|
|
|
+{
|
|
|
+ return (sk && sk->sk_tx_queue_mapping >= 0);
|
|
|
+}
|
|
|
+
|
|
|
static inline void sk_set_socket(struct sock *sk, struct socket *sock)
|
|
|
{
|
|
|
+ sk_tx_queue_clear(sk);
|
|
|
sk->sk_socket = sock;
|
|
|
}
|
|
|
|
|
@@ -1152,6 +1176,7 @@ __sk_dst_set(struct sock *sk, struct dst_entry *dst)
|
|
|
{
|
|
|
struct dst_entry *old_dst;
|
|
|
|
|
|
+ sk_tx_queue_clear(sk);
|
|
|
old_dst = sk->sk_dst_cache;
|
|
|
sk->sk_dst_cache = dst;
|
|
|
dst_release(old_dst);
|
|
@@ -1170,6 +1195,7 @@ __sk_dst_reset(struct sock *sk)
|
|
|
{
|
|
|
struct dst_entry *old_dst;
|
|
|
|
|
|
+ sk_tx_queue_clear(sk);
|
|
|
old_dst = sk->sk_dst_cache;
|
|
|
sk->sk_dst_cache = NULL;
|
|
|
dst_release(old_dst);
|