xref: /openbmc/linux/include/net/tipc.h (revision d869dea6)
18d6e79d3SJon Maloy /*
28d6e79d3SJon Maloy  * include/net/tipc.h: Include file for TIPC message header routines
38d6e79d3SJon Maloy  *
48d6e79d3SJon Maloy  * Copyright (c) 2017 Ericsson AB
58d6e79d3SJon Maloy  * All rights reserved.
68d6e79d3SJon Maloy  *
78d6e79d3SJon Maloy  * Redistribution and use in source and binary forms, with or without
88d6e79d3SJon Maloy  * modification, are permitted provided that the following conditions are met:
98d6e79d3SJon Maloy  *
108d6e79d3SJon Maloy  * 1. Redistributions of source code must retain the above copyright
118d6e79d3SJon Maloy  *    notice, this list of conditions and the following disclaimer.
128d6e79d3SJon Maloy  * 2. Redistributions in binary form must reproduce the above copyright
138d6e79d3SJon Maloy  *    notice, this list of conditions and the following disclaimer in the
148d6e79d3SJon Maloy  *    documentation and/or other materials provided with the distribution.
158d6e79d3SJon Maloy  * 3. Neither the names of the copyright holders nor the names of its
168d6e79d3SJon Maloy  *    contributors may be used to endorse or promote products derived from
178d6e79d3SJon Maloy  *    this software without specific prior written permission.
188d6e79d3SJon Maloy  *
198d6e79d3SJon Maloy  * Alternatively, this software may be distributed under the terms of the
208d6e79d3SJon Maloy  * GNU General Public License ("GPL") version 2 as published by the Free
218d6e79d3SJon Maloy  * Software Foundation.
228d6e79d3SJon Maloy  *
238d6e79d3SJon Maloy  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
248d6e79d3SJon Maloy  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
258d6e79d3SJon Maloy  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
268d6e79d3SJon Maloy  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
278d6e79d3SJon Maloy  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
288d6e79d3SJon Maloy  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
298d6e79d3SJon Maloy  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
308d6e79d3SJon Maloy  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
318d6e79d3SJon Maloy  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
328d6e79d3SJon Maloy  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
338d6e79d3SJon Maloy  * POSSIBILITY OF SUCH DAMAGE.
348d6e79d3SJon Maloy  */
358d6e79d3SJon Maloy 
368d6e79d3SJon Maloy #ifndef _TIPC_HDR_H
378d6e79d3SJon Maloy #define _TIPC_HDR_H
388d6e79d3SJon Maloy 
398d6e79d3SJon Maloy #include <linux/random.h>
408d6e79d3SJon Maloy 
418d6e79d3SJon Maloy #define KEEPALIVE_MSG_MASK 0x0e080000  /* LINK_PROTOCOL + MSG_IS_KEEPALIVE */
428d6e79d3SJon Maloy 
438d6e79d3SJon Maloy struct tipc_basic_hdr {
448d6e79d3SJon Maloy 	__be32 w[4];
458d6e79d3SJon Maloy };
468d6e79d3SJon Maloy 
tipc_hdr_rps_key(struct tipc_basic_hdr * hdr)47d869dea6SPaolo Abeni static inline __be32 tipc_hdr_rps_key(struct tipc_basic_hdr *hdr)
488d6e79d3SJon Maloy {
498d6e79d3SJon Maloy 	u32 w0 = ntohl(hdr->w[0]);
508d6e79d3SJon Maloy 	bool keepalive_msg = (w0 & KEEPALIVE_MSG_MASK) == KEEPALIVE_MSG_MASK;
51d869dea6SPaolo Abeni 	__be32 key;
528d6e79d3SJon Maloy 
538d6e79d3SJon Maloy 	/* Return source node identity as key */
548d6e79d3SJon Maloy 	if (likely(!keepalive_msg))
558d6e79d3SJon Maloy 		return hdr->w[3];
568d6e79d3SJon Maloy 
578d6e79d3SJon Maloy 	/* Spread PROBE/PROBE_REPLY messages across the cores */
588d6e79d3SJon Maloy 	get_random_bytes(&key, sizeof(key));
598d6e79d3SJon Maloy 	return key;
608d6e79d3SJon Maloy }
618d6e79d3SJon Maloy 
628d6e79d3SJon Maloy #endif
63