• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/net/

Lines Matching refs:lro

41  * lro: Specifies whether to enable Large Receive Offload (LRO) or not.
500 module_param_named(lro, lro_enable, uint, 0);
3041 if (ring_data->lro) {
3044 struct lro *lro = &ring_data->lro0_n[i];
3045 if (lro->in_use) {
3046 update_L3L4_header(ring_data->nic, lro);
3047 queue_rx_frame(lro->parent, lro->vlan_tag);
3048 clear_lro_session(lro);
6753 sp->lro = !!(dev->features & NETIF_F_LRO);
7310 ring->lro = sp->lro;
7344 if (sp->lro) {
7468 struct lro *uninitialized_var(lro);
7555 ((!ring_data->lro) ||
7556 (ring_data->lro && (!(rxdp->Control_1 & RXD_FRAME_IP_FRAG)))) &&
7567 if (ring_data->lro) {
7574 &tcp_len, &lro,
7578 lro->parent = skb;
7581 lro_append_pkt(sp, lro, skb, tcp_len);
7584 lro_append_pkt(sp, lro, skb, tcp_len);
7585 queue_rx_frame(lro->parent,
7586 lro->vlan_tag);
7587 clear_lro_session(lro);
7591 lro->parent->data_len = lro->frags_len;
7593 queue_rx_frame(lro->parent,
7594 lro->vlan_tag);
7595 clear_lro_session(lro);
7914 sp->lro = lro_enable;
8286 if (sp->lro)
8422 static int check_for_socket_match(struct lro *lro, struct iphdr *ip,
8426 if ((lro->iph->saddr != ip->saddr) ||
8427 (lro->iph->daddr != ip->daddr) ||
8428 (lro->tcph->source != tcp->source) ||
8429 (lro->tcph->dest != tcp->dest))
8439 static void initiate_new_session(struct lro *lro, u8 *l2h,
8444 lro->l2h = l2h;
8445 lro->iph = ip;
8446 lro->tcph = tcp;
8447 lro->tcp_next_seq = tcp_pyld_len + ntohl(tcp->seq);
8448 lro->tcp_ack = tcp->ack_seq;
8449 lro->sg_num = 1;
8450 lro->total_len = ntohs(ip->tot_len);
8451 lro->frags_len = 0;
8452 lro->vlan_tag = vlan_tag;
8460 lro->saw_ts = 1;
8461 lro->cur_tsval = ntohl(*(ptr+1));
8462 lro->cur_tsecr = *(ptr+2);
8464 lro->in_use = 1;
8467 static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro)
8469 struct iphdr *ip = lro->iph;
8470 struct tcphdr *tcp = lro->tcph;
8477 ip->tot_len = htons(lro->total_len);
8479 nchk = ip_fast_csum((u8 *)lro->iph, ip->ihl);
8483 tcp->ack_seq = lro->tcp_ack;
8484 tcp->window = lro->window;
8487 if (lro->saw_ts) {
8489 *(ptr+2) = lro->cur_tsecr;
8495 swstats->sum_avg_pkts_aggregated += lro->sg_num;
8499 static void aggregate_new_rx(struct lro *lro, struct iphdr *ip,
8503 lro->total_len += l4_pyld;
8504 lro->frags_len += l4_pyld;
8505 lro->tcp_next_seq += l4_pyld;
8506 lro->sg_num++;
8509 lro->tcp_ack = tcp->ack_seq;
8510 lro->window = tcp->window;
8512 if (lro->saw_ts) {
8516 lro->cur_tsval = ntohl(*(ptr+1));
8517 lro->cur_tsecr = *(ptr + 2);
8521 static int verify_l3_l4_lro_capable(struct lro *l_lro, struct iphdr *ip,
8580 u8 **tcp, u32 *tcp_len, struct lro **lro,
8600 struct lro *l_lro = &ring_data->lro0_n[i];
8605 *lro = l_lro;
8607 if ((*lro)->tcp_next_seq != ntohl(tcph->seq)) {
8611 (*lro)->tcp_next_seq,
8638 struct lro *l_lro = &ring_data->lro0_n[i];
8640 *lro = l_lro;
8650 *lro = NULL;
8656 initiate_new_session(*lro, buffer, ip, tcph, *tcp_len,
8660 update_L3L4_header(sp, *lro);
8663 aggregate_new_rx(*lro, ip, tcph, *tcp_len);
8664 if ((*lro)->sg_num == sp->lro_max_aggr_per_sess) {
8665 update_L3L4_header(sp, *lro);
8677 static void clear_lro_session(struct lro *lro)
8679 static u16 lro_struct_size = sizeof(struct lro);
8681 memset(lro, 0, lro_struct_size);
8704 static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro,
8707 struct sk_buff *first = lro->parent;
8711 first->data_len = lro->frags_len;
8714 lro->last_frag->next = skb;
8718 lro->last_frag = skb;