On Thu, May 04, 2017 at 10:08:07AM +0200, Geert Uytterhoeven wrote: > > @@ -314,12 +316,14 @@ void km_state_expired(struct xfrm_state *x, int hard, > > u32 portid); > > int __xfrm_state_delete(struct xfrm_state *x); > > > > struct xfrm_state_afinfo { > > - unsigned int family; > > - unsigned int proto; > > - __be16 eth_proto; > > - struct module *owner; > > - const struct xfrm_type *type_map[IPPROTO_MAX]; > > - struct xfrm_mode *mode_map[XFRM_MODE_MAX]; > > + unsigned int family; > > + unsigned int proto; > > + __be16 eth_proto; > > + struct module *owner; > > + const struct xfrm_type *type_map[IPPROTO_MAX]; > > + const struct xfrm_type_offload *type_offload_map[IPPROTO_MAX]; > > + struct xfrm_mode *mode_map[XFRM_MODE_MAX]; > > Bloat-o-meter reports the addition of xfrm_state_afinfo.type_offload_map[] > increases the static kernel size by 1 KiB on 32-bit platforms (double on > 64-bit > platforms): > > function old new delta > xfrm4_state_afinfo 1102 2126 +1024 > > While IPPROTO_MAX = 256, the defined list of IP protocols is spread > sparsely over the number space, but I assume all values may occur?
Actually no, I think we could boil this down to less than ten really used protocols by mapping the IPPROTO numbers to some XFRMPROTO numbers. I'll look into this. Thanks!