diff --git a/ip/ipxfrm.c b/ip/ipxfrm.c
index 0495ff4..b1d4c6e 100644
--- a/ip/ipxfrm.c
+++ b/ip/ipxfrm.c
@@ -1275,6 +1275,7 @@ static int xfrm_selector_upspec_parse(struct xfrm_selector *sel,
case IPPROTO_UDP:
case IPPROTO_SCTP:
case IPPROTO_DCCP:
+ case IPPROTO_IP: /* to allow shared SA for different protocols */
break;
default:
fprintf(stderr, "\"sport\" and \"dport\" are invalid with PROTO value \"%s\"\n", strxf_proto(sel->proto));