Lines Matching defs:lro

2970 	if (ring_data->lro) {
2973 struct lro *lro = &ring_data->lro0_n[i];
2974 if (lro->in_use) {
2975 update_L3L4_header(ring_data->nic, lro);
2976 queue_rx_frame(lro->parent, lro->vlan_tag);
2977 clear_lro_session(lro);
7119 ring->lro = !!(dev->features & NETIF_F_LRO);
7287 struct lro *lro;
7373 ((!ring_data->lro) ||
7385 if (ring_data->lro) {
7392 &tcp_len, &lro,
7396 lro->parent = skb;
7399 lro_append_pkt(sp, lro, skb, tcp_len);
7402 lro_append_pkt(sp, lro, skb, tcp_len);
7403 queue_rx_frame(lro->parent,
7404 lro->vlan_tag);
7405 clear_lro_session(lro);
7409 lro->parent->data_len = lro->frags_len;
7411 queue_rx_frame(lro->parent,
7412 lro->vlan_tag);
7413 clear_lro_session(lro);
8201 static int check_for_socket_match(struct lro *lro, struct iphdr *ip,
8205 if ((lro->iph->saddr != ip->saddr) ||
8206 (lro->iph->daddr != ip->daddr) ||
8207 (lro->tcph->source != tcp->source) ||
8208 (lro->tcph->dest != tcp->dest))
8218 static void initiate_new_session(struct lro *lro, u8 *l2h,
8223 lro->l2h = l2h;
8224 lro->iph = ip;
8225 lro->tcph = tcp;
8226 lro->tcp_next_seq = tcp_pyld_len + ntohl(tcp->seq);
8227 lro->tcp_ack = tcp->ack_seq;
8228 lro->sg_num = 1;
8229 lro->total_len = ntohs(ip->tot_len);
8230 lro->frags_len = 0;
8231 lro->vlan_tag = vlan_tag;
8239 lro->saw_ts = 1;
8240 lro->cur_tsval = ntohl(*(ptr+1));
8241 lro->cur_tsecr = *(ptr+2);
8243 lro->in_use = 1;
8246 static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro)
8248 struct iphdr *ip = lro->iph;
8249 struct tcphdr *tcp = lro->tcph;
8255 csum_replace2(&ip->check, ip->tot_len, htons(lro->total_len));
8256 ip->tot_len = htons(lro->total_len);
8259 tcp->ack_seq = lro->tcp_ack;
8260 tcp->window = lro->window;
8263 if (lro->saw_ts) {
8265 *(ptr+2) = lro->cur_tsecr;
8271 swstats->sum_avg_pkts_aggregated += lro->sg_num;
8275 static void aggregate_new_rx(struct lro *lro, struct iphdr *ip,
8279 lro->total_len += l4_pyld;
8280 lro->frags_len += l4_pyld;
8281 lro->tcp_next_seq += l4_pyld;
8282 lro->sg_num++;
8285 lro->tcp_ack = tcp->ack_seq;
8286 lro->window = tcp->window;
8288 if (lro->saw_ts) {
8292 lro->cur_tsval = ntohl(*(ptr+1));
8293 lro->cur_tsecr = *(ptr + 2);
8297 static int verify_l3_l4_lro_capable(struct lro *l_lro, struct iphdr *ip,
8356 u8 **tcp, u32 *tcp_len, struct lro **lro,
8376 struct lro *l_lro = &ring_data->lro0_n[i];
8381 *lro = l_lro;
8383 if ((*lro)->tcp_next_seq != ntohl(tcph->seq)) {
8387 (*lro)->tcp_next_seq,
8414 struct lro *l_lro = &ring_data->lro0_n[i];
8416 *lro = l_lro;
8426 *lro = NULL;
8432 initiate_new_session(*lro, buffer, ip, tcph, *tcp_len,
8436 update_L3L4_header(sp, *lro);
8439 aggregate_new_rx(*lro, ip, tcph, *tcp_len);
8440 if ((*lro)->sg_num == sp->lro_max_aggr_per_sess) {
8441 update_L3L4_header(sp, *lro);
8453 static void clear_lro_session(struct lro *lro)
8455 static u16 lro_struct_size = sizeof(struct lro);
8457 memset(lro, 0, lro_struct_size);
8474 static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro,
8477 struct sk_buff *first = lro->parent;
8481 first->data_len = lro->frags_len;
8484 lro->last_frag->next = skb;
8488 lro->last_frag = skb;