static int set_ipv4(struct sk_buff *skb, const struct ovs_key_ipv4 *ipv4_key) { struct iphdr *nh; int err; err = make_writable(skb, skb_network_offset(skb) + sizeof(struct iphdr)); if (unlikely(err)) return err; nh = ip_hdr(skb); if (ipv4_key->ipv4_src != nh->saddr) set_ip_addr(skb, nh, &nh->saddr, ipv4_key->ipv4_src); if (ipv4_key->ipv4_dst != nh->daddr) set_ip_addr(skb, nh, &nh->daddr, ipv4_key->ipv4_dst); if (ipv4_key->ipv4_tos != nh->tos) ipv4_change_dsfield(nh, 0, ipv4_key->ipv4_tos); if (ipv4_key->ipv4_ttl != nh->ttl) set_ip_ttl(skb, nh, ipv4_key->ipv4_ttl); return 0; }
static void set_v4_values(uint8_t *tag1, ovs_be16 *tag2, uint8_t *tag3, ovs_be16 ipv6_loadlen, uint8_t ipv6_ttl, ovs_be32 *addr_src, ovs_be32 *addr_dst) { set_ip_ihl_ver(tag1); set_ip_tot_len(tag2, ipv6_loadlen); set_ip_ttl(tag3, ipv6_ttl); set_ip_src(addr_src); set_ip_dst(addr_dst); }