|
@@ -173,7 +173,19 @@ __xfrm6_state_sort(struct xfrm_state **dst, struct xfrm_state **src, int n)
|
|
|
if (j == n)
|
|
|
goto end;
|
|
|
|
|
|
- /* XXX: Rule 2: select MIPv6 RO or inbound trigger */
|
|
|
+ /* Rule 2: select MIPv6 RO or inbound trigger */
|
|
|
+#ifdef CONFIG_IPV6_MIP6
|
|
|
+ for (i = 0; i < n; i++) {
|
|
|
+ if (src[i] &&
|
|
|
+ (src[i]->props.mode == XFRM_MODE_ROUTEOPTIMIZATION ||
|
|
|
+ src[i]->props.mode == XFRM_MODE_IN_TRIGGER)) {
|
|
|
+ dst[j++] = src[i];
|
|
|
+ src[i] = NULL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (j == n)
|
|
|
+ goto end;
|
|
|
+#endif
|
|
|
|
|
|
/* Rule 3: select IPsec transport AH */
|
|
|
for (i = 0; i < n; i++) {
|
|
@@ -226,7 +238,19 @@ __xfrm6_tmpl_sort(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n)
|
|
|
if (j == n)
|
|
|
goto end;
|
|
|
|
|
|
- /* XXX: Rule 2: select MIPv6 RO or inbound trigger */
|
|
|
+ /* Rule 2: select MIPv6 RO or inbound trigger */
|
|
|
+#ifdef CONFIG_IPV6_MIP6
|
|
|
+ for (i = 0; i < n; i++) {
|
|
|
+ if (src[i] &&
|
|
|
+ (src[i]->mode == XFRM_MODE_ROUTEOPTIMIZATION ||
|
|
|
+ src[i]->mode == XFRM_MODE_IN_TRIGGER)) {
|
|
|
+ dst[j++] = src[i];
|
|
|
+ src[i] = NULL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (j == n)
|
|
|
+ goto end;
|
|
|
+#endif
|
|
|
|
|
|
/* Rule 3: select IPsec tunnel */
|
|
|
for (i = 0; i < n; i++) {
|