Skip to content

Commit 3ae6d66

Browse files
lxindavem330
authored andcommitted
tipc: add tipc_bearer_min_mtu to calculate min mtu
As different media may requires different min mtu, and even the same media with different net family requires different min mtu, add tipc_bearer_min_mtu() to calculate min mtu accordingly. This API will be used to check the new mtu when doing the link mtu negotiation in the next patch. Signed-off-by: Xin Long <[email protected]> Acked-by: Jon Maloy <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent b48a186 commit 3ae6d66

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

net/tipc/bearer.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,19 @@ int tipc_bearer_mtu(struct net *net, u32 bearer_id)
541541
return mtu;
542542
}
543543

544+
int tipc_bearer_min_mtu(struct net *net, u32 bearer_id)
545+
{
546+
int mtu = TIPC_MIN_BEARER_MTU;
547+
struct tipc_bearer *b;
548+
549+
rcu_read_lock();
550+
b = bearer_get(net, bearer_id);
551+
if (b)
552+
mtu += b->encap_hlen;
553+
rcu_read_unlock();
554+
return mtu;
555+
}
556+
544557
/* tipc_bearer_xmit_skb - sends buffer to destination over bearer
545558
*/
546559
void tipc_bearer_xmit_skb(struct net *net, u32 bearer_id,

net/tipc/bearer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ struct tipc_media {
146146
* @identity: array index of this bearer within TIPC bearer array
147147
* @disc: ptr to link setup request
148148
* @net_plane: network plane ('A' through 'H') currently associated with bearer
149+
* @encap_hlen: encap headers length
149150
* @up: bearer up flag (bit 0)
150151
* @refcnt: tipc_bearer reference counter
151152
*
@@ -170,6 +171,7 @@ struct tipc_bearer {
170171
u32 identity;
171172
struct tipc_discoverer *disc;
172173
char net_plane;
174+
u16 encap_hlen;
173175
unsigned long up;
174176
refcount_t refcnt;
175177
};
@@ -232,6 +234,7 @@ int tipc_bearer_setup(void);
232234
void tipc_bearer_cleanup(void);
233235
void tipc_bearer_stop(struct net *net);
234236
int tipc_bearer_mtu(struct net *net, u32 bearer_id);
237+
int tipc_bearer_min_mtu(struct net *net, u32 bearer_id);
235238
bool tipc_bearer_bcast_support(struct net *net, u32 bearer_id);
236239
void tipc_bearer_xmit_skb(struct net *net, u32 bearer_id,
237240
struct sk_buff *skb,

net/tipc/udp_media.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -738,8 +738,8 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,
738738
udp_conf.local_ip.s_addr = local.ipv4.s_addr;
739739
udp_conf.use_udp_checksums = false;
740740
ub->ifindex = dev->ifindex;
741-
if (tipc_mtu_bad(dev, sizeof(struct iphdr) +
742-
sizeof(struct udphdr))) {
741+
b->encap_hlen = sizeof(struct iphdr) + sizeof(struct udphdr);
742+
if (tipc_mtu_bad(dev, b->encap_hlen)) {
743743
err = -EINVAL;
744744
goto err;
745745
}
@@ -760,6 +760,7 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,
760760
else
761761
udp_conf.local_ip6 = local.ipv6;
762762
ub->ifindex = dev->ifindex;
763+
b->encap_hlen = sizeof(struct ipv6hdr) + sizeof(struct udphdr);
763764
b->mtu = 1280;
764765
#endif
765766
} else {

0 commit comments

Comments
 (0)