act_ct.c (002c6ca75289a4ac4f6738213dd2d258704886e4) act_ct.c (52d1aa8b8249ff477aaa38b6f74a8ced780d079c)
1// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
2/* -
3 * net/sched/act_ct.c Connection Tracking action
4 *
5 * Authors: Paul Blakey <paulb@mellanox.com>
6 * Yossi Kuperman <yossiku@mellanox.com>
7 * Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
8 */

--- 164 unchanged lines hidden (view full) ---

173 struct nf_conn_labels *ct_labels;
174 struct flow_action_entry *entry;
175 enum ip_conntrack_info ctinfo;
176 u32 *act_ct_labels;
177
178 entry = tcf_ct_flow_table_flow_action_get_next(action);
179 entry->id = FLOW_ACTION_CT_METADATA;
180#if IS_ENABLED(CONFIG_NF_CONNTRACK_MARK)
1// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
2/* -
3 * net/sched/act_ct.c Connection Tracking action
4 *
5 * Authors: Paul Blakey <paulb@mellanox.com>
6 * Yossi Kuperman <yossiku@mellanox.com>
7 * Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
8 */

--- 164 unchanged lines hidden (view full) ---

173 struct nf_conn_labels *ct_labels;
174 struct flow_action_entry *entry;
175 enum ip_conntrack_info ctinfo;
176 u32 *act_ct_labels;
177
178 entry = tcf_ct_flow_table_flow_action_get_next(action);
179 entry->id = FLOW_ACTION_CT_METADATA;
180#if IS_ENABLED(CONFIG_NF_CONNTRACK_MARK)
181 entry->ct_metadata.mark = ct->mark;
181 entry->ct_metadata.mark = READ_ONCE(ct->mark);
182#endif
183 ctinfo = dir == IP_CT_DIR_ORIGINAL ? IP_CT_ESTABLISHED :
184 IP_CT_ESTABLISHED_REPLY;
185 /* aligns with the CT reference on the SKB nf_ct_set */
186 entry->ct_metadata.cookie = (unsigned long)ct | ctinfo;
187 entry->ct_metadata.orig_dir = dir == IP_CT_DIR_ORIGINAL;
188
189 act_ct_labels = entry->ct_metadata.labels;

--- 741 unchanged lines hidden (view full) ---

931static void tcf_ct_act_set_mark(struct nf_conn *ct, u32 mark, u32 mask)
932{
933#if IS_ENABLED(CONFIG_NF_CONNTRACK_MARK)
934 u32 new_mark;
935
936 if (!mask)
937 return;
938
182#endif
183 ctinfo = dir == IP_CT_DIR_ORIGINAL ? IP_CT_ESTABLISHED :
184 IP_CT_ESTABLISHED_REPLY;
185 /* aligns with the CT reference on the SKB nf_ct_set */
186 entry->ct_metadata.cookie = (unsigned long)ct | ctinfo;
187 entry->ct_metadata.orig_dir = dir == IP_CT_DIR_ORIGINAL;
188
189 act_ct_labels = entry->ct_metadata.labels;

--- 741 unchanged lines hidden (view full) ---

931static void tcf_ct_act_set_mark(struct nf_conn *ct, u32 mark, u32 mask)
932{
933#if IS_ENABLED(CONFIG_NF_CONNTRACK_MARK)
934 u32 new_mark;
935
936 if (!mask)
937 return;
938
939 new_mark = mark | (ct->mark & ~(mask));
940 if (ct->mark != new_mark) {
941 ct->mark = new_mark;
939 new_mark = mark | (READ_ONCE(ct->mark) & ~(mask));
940 if (READ_ONCE(ct->mark) != new_mark) {
941 WRITE_ONCE(ct->mark, new_mark);
942 if (nf_ct_is_confirmed(ct))
943 nf_conntrack_event_cache(IPCT_MARK, ct);
944 }
945#endif
946}
947
948static void tcf_ct_act_set_labels(struct nf_conn *ct,
949 u32 *labels,

--- 733 unchanged lines hidden ---
942 if (nf_ct_is_confirmed(ct))
943 nf_conntrack_event_cache(IPCT_MARK, ct);
944 }
945#endif
946}
947
948static void tcf_ct_act_set_labels(struct nf_conn *ct,
949 u32 *labels,

--- 733 unchanged lines hidden ---