Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #include <linux/ceph/decode.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) static int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) ceph_decode_entity_addr_versioned(void **p, void *end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) 				  struct ceph_entity_addr *addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 	int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) 	u8 struct_v;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) 	u32 struct_len, addr_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 	void *struct_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 	ret = ceph_start_decoding(p, end, 1, "entity_addr_t", &struct_v,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 				  &struct_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 	if (ret)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 		goto bad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 	ret = -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	struct_end = *p + struct_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	ceph_decode_copy_safe(p, end, &addr->type, sizeof(addr->type), bad);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	ceph_decode_copy_safe(p, end, &addr->nonce, sizeof(addr->nonce), bad);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	ceph_decode_32_safe(p, end, addr_len, bad);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	if (addr_len > sizeof(addr->in_addr))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 		goto bad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	memset(&addr->in_addr, 0, sizeof(addr->in_addr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	if (addr_len) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 		ceph_decode_copy_safe(p, end, &addr->in_addr, addr_len, bad);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 		addr->in_addr.ss_family =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 			le16_to_cpu((__force __le16)addr->in_addr.ss_family);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	/* Advance past anything the client doesn't yet understand */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	*p = struct_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	ret = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) bad:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) static int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) ceph_decode_entity_addr_legacy(void **p, void *end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 			       struct ceph_entity_addr *addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	int ret = -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	/* Skip rest of type field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	ceph_decode_skip_n(p, end, 3, bad);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 	 * Clients that don't support ADDR2 always send TYPE_NONE, change it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 	 * to TYPE_LEGACY for forward compatibility.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	addr->type = CEPH_ENTITY_ADDR_TYPE_LEGACY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	ceph_decode_copy_safe(p, end, &addr->nonce, sizeof(addr->nonce), bad);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 	memset(&addr->in_addr, 0, sizeof(addr->in_addr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	ceph_decode_copy_safe(p, end, &addr->in_addr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 			      sizeof(addr->in_addr), bad);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 	addr->in_addr.ss_family =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 			be16_to_cpu((__force __be16)addr->in_addr.ss_family);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	ret = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) bad:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) ceph_decode_entity_addr(void **p, void *end, struct ceph_entity_addr *addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 	u8 marker;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 	ceph_decode_8_safe(p, end, marker, bad);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) 	if (marker == 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 		return ceph_decode_entity_addr_versioned(p, end, addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 	else if (marker == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 		return ceph_decode_entity_addr_legacy(p, end, addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) bad:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 	return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) EXPORT_SYMBOL(ceph_decode_entity_addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)