Lines Matching full:hop

764 /* Hop-by-hop hdr helper functions
768 * calipso_opt_update - Replaces socket's hop options with a new set
770 * @hop: new hop options
773 * Replaces @sk's hop options with @hop. @hop may be NULL to leave
774 * the socket with no hop options.
777 static int calipso_opt_update(struct sock *sk, struct ipv6_opt_hdr *hop) in calipso_opt_update() argument
781 txopts = ipv6_renew_options(sk, old, IPV6_HOPOPTS, hop); in calipso_opt_update()
823 * calipso_opt_find - Finds the CALIPSO option in an IPv6 hop options header
824 * @hop: the hop options header
833 * offsets within @hop of the start of padding before the first
843 static int calipso_opt_find(struct ipv6_opt_hdr *hop, unsigned int *start, in calipso_opt_find() argument
848 unsigned char *opt = (unsigned char *)hop; in calipso_opt_find()
850 opt_len = ipv6_optlen(hop); in calipso_opt_find()
851 offset = sizeof(*hop); in calipso_opt_find()
854 tlv_len = calipso_tlv_len(hop, offset); in calipso_opt_find()
879 *start = offset_s + calipso_tlv_len(hop, offset_s); in calipso_opt_find()
881 *start = sizeof(*hop); in calipso_opt_find()
883 *end = offset_e + calipso_tlv_len(hop, offset_e); in calipso_opt_find()
891 * calipso_opt_insert - Inserts a CALIPSO option into an IPv6 hop opt hdr
892 * @hop: the original hop options header
897 * Creates a new hop options header based on @hop with a
898 * CALIPSO option added to it. If @hop already contains a CALIPSO
900 * after any existing options. If @hop is NULL then the new header
905 calipso_opt_insert(struct ipv6_opt_hdr *hop, in calipso_opt_insert() argument
913 if (hop) { in calipso_opt_insert()
914 hop_len = ipv6_optlen(hop); in calipso_opt_insert()
915 ret_val = calipso_opt_find(hop, &start, &end); in calipso_opt_insert()
920 start = sizeof(*hop); in calipso_opt_insert()
929 if (start > sizeof(*hop)) in calipso_opt_insert()
930 memcpy(new, hop, start); in calipso_opt_insert()
945 memcpy((char *)new + buf_len, (char *)hop + end, hop_len - end); in calipso_opt_insert()
956 * @hop: the original header
960 * Creates a new header based on @hop without any CALIPSO option. If @hop
961 * doesn't contain a CALIPSO option it returns -ENOENT. If @hop contains
968 static int calipso_opt_del(struct ipv6_opt_hdr *hop, in calipso_opt_del() argument
974 ret_val = calipso_opt_find(hop, &start, &end); in calipso_opt_del()
978 hop_len = ipv6_optlen(hop); in calipso_opt_del()
979 if (start == sizeof(*hop) && end == hop_len) { in calipso_opt_del()
990 memcpy(*new, hop, start); in calipso_opt_del()
995 memcpy((char *)*new + start + pad, (char *)hop + end, in calipso_opt_del()
1072 struct ipv6_opt_hdr *hop; in calipso_sock_getattr() local
1085 hop = txopts->hopopt; in calipso_sock_getattr()
1086 opt = (unsigned char *)hop; in calipso_sock_getattr()
1087 opt_len = ipv6_optlen(hop); in calipso_sock_getattr()
1088 offset = sizeof(*hop); in calipso_sock_getattr()
1090 len = calipso_tlv_len(hop, offset); in calipso_sock_getattr()
1312 struct ipv6_opt_hdr *hop; in calipso_skbuff_setattr() local
1319 hop = (struct ipv6_opt_hdr *)(ip6_hdr + 1); in calipso_skbuff_setattr()
1320 ret_val = calipso_opt_find(hop, &start, &end); in calipso_skbuff_setattr()
1356 hop = (struct ipv6_opt_hdr *)(ip6_hdr + 1); in calipso_skbuff_setattr()
1364 hop->hdrlen += len_delta / 8; in calipso_skbuff_setattr()
1366 memcpy((char *)hop + start, buf + (start & 3), new_end - start); in calipso_skbuff_setattr()
1367 calipso_pad_write((unsigned char *)hop, new_end, pad); in calipso_skbuff_setattr()