Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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);
}