Index: dccp-quilt/net/dccp/dccp_options.c
===================================================================
--- dccp-quilt.orig/net/dccp/dccp_options.c	2005-05-10 17:50:49.000000000 -0300
+++ dccp-quilt/net/dccp/dccp_options.c	2005-05-11 17:55:22.000000000 -0300
@@ -68,6 +68,7 @@
 	const struct dccp_hdr *dh = dccp_hdr(skb);
 	unsigned char *opt_ptr = (unsigned char *)dh + dccp_hdr_len(skb);
 	const unsigned char *opt_end = (unsigned char *)dh + (dh->dccph_doff * 4);
+	int mandatory = 0;
 	unsigned char opt, len;
 	unsigned char *value;
 
@@ -161,15 +162,37 @@
 			dccp_pr_debug("%sELAPSED_TIME=%d\n", debug_prefix, elapsed_time);
 		}
 			break;
+		case DCCPO_MANDATORY:
+			if (mandatory) {
+				/* FIXME - ignoring for now */
+				dccp_pr_debug("DCCPO_MANDATORY + "
+					      "DCCPO_MANDATORY\n");
+				mandatory = 0;
+				break;
+			}	
+			mandatory = 1;
+			break;
 		default:
+			if (mandatory) {
+
+			}
 			pr_info("DCCP(%p): option %d(len=%d) not implemented, ignoring\n",
 				sk, opt, len);
 			break;
 	        }
+
+		/* disabling mandatory if processed option is not
+		 * DCCPO_MANDATORY */
+		if (mandatory && opt != DCCPO_MANDATORY)
+			mandatory = 0;
+	}
+	if (mandatory) {
+		/* last option is mandatory */
 	}
 
 	return 0;
 
+out_mandatory_unknown:
 out_invalid_option:
 	DCCP_INC_STATS_BH(DCCP_MIB_INVALIDOPT);
 	DCCP_SKB_CB(skb)->dccpd_reset_code = DCCP_RESET_CODE_OPTION_ERROR;
