#include <net/checksum.h>
#include "actions.h"
+#include "checksum.h"
#include "datapath.h"
#include "openvswitch/datapath-protocol.h"
#include "vport.h"
if (vh->h_vlan_proto != htons(ETH_P_8021Q) || skb->len < VLAN_ETH_HLEN)
return skb;
- if (OVS_CB(skb)->ip_summed == OVS_CSUM_COMPLETE)
+ if (get_ip_summed(skb) == OVS_CSUM_COMPLETE)
skb->csum = csum_sub(skb->csum, csum_partial(skb->data
+ ETH_HLEN, VLAN_HLEN, 0));
const struct odp_flow_key *key,
const union odp_action *a, int n_actions)
{
- __be16 mask = a->dl_tci.mask;
__be16 tci = a->dl_tci.tci;
skb = make_writable(skb, VLAN_HLEN);
vh = vlan_eth_hdr(skb);
old_tci = vh->h_vlan_TCI;
- vh->h_vlan_TCI = (vh->h_vlan_TCI & ~mask) | tci;
+ vh->h_vlan_TCI = tci;
- if (OVS_CB(skb)->ip_summed == OVS_CSUM_COMPLETE) {
+ if (get_ip_summed(skb) == OVS_CSUM_COMPLETE) {
__be16 diff[] = { ~old_tci, vh->h_vlan_TCI };
skb->csum = ~csum_partial((char *)diff, sizeof(diff),
/* GSO doesn't fix up the hardware computed checksum so this
* will only be hit in the non-GSO case. */
- if (OVS_CB(skb)->ip_summed == OVS_CSUM_COMPLETE)
+ if (get_ip_summed(skb) == OVS_CSUM_COMPLETE)
skb->csum = csum_add(skb->csum, csum_partial(skb->data
+ ETH_HLEN, VLAN_HLEN, 0));
}
{
__be32 diff[] = { ~from, to };
- if (OVS_CB(skb)->ip_summed != OVS_CSUM_PARTIAL) {
+ if (get_ip_summed(skb) != OVS_CSUM_PARTIAL) {
*sum = csum_fold(csum_partial((char *)diff, sizeof(diff),
~csum_unfold(*sum)));
- if (OVS_CB(skb)->ip_summed == OVS_CSUM_COMPLETE && pseudohdr)
+ if (get_ip_summed(skb) == OVS_CSUM_COMPLETE && pseudohdr)
skb->csum = ~csum_partial((char *)diff, sizeof(diff),
~skb->csum);
} else if (pseudohdr)
static void do_output(struct datapath *dp, struct sk_buff *skb, int out_port)
{
- struct dp_port *p;
+ struct vport *p;
if (!skb)
goto error;
if (!p)
goto error;
- vport_send(p->vport, skb);
+ vport_send(p, skb);
return;
error:
* information about what happened to it. */
static void sflow_sample(struct datapath *dp, struct sk_buff *skb,
const union odp_action *a, int n_actions,
- struct dp_port *dp_port)
+ struct vport *vport)
{
struct odp_sflow_sample_header *hdr;
unsigned int actlen = n_actions * sizeof(union odp_action);
memcpy(__skb_push(nskb, actlen), a, actlen);
hdr = (struct odp_sflow_sample_header*)__skb_push(nskb, hdrlen);
hdr->n_actions = n_actions;
- hdr->sample_pool = atomic_read(&dp_port->sflow_pool);
+ hdr->sample_pool = atomic_read(&vport->sflow_pool);
dp_output_control(dp, nskb, _ODPL_SFLOW_NR, 0);
}
int err;
if (dp->sflow_probability) {
- struct dp_port *p = OVS_CB(skb)->dp_port;
+ struct vport *p = OVS_CB(skb)->vport;
if (p) {
atomic_inc(&p->sflow_pool);
if (dp->sflow_probability == UINT_MAX ||