diff -uprN net/dccp/dccp_options.c net/dccp/dccp_options.c
--- net/dccp/dccp_options.c	2005-04-15 20:17:34.000000000 -0200
+++ net/dccp/dccp_options.c	2005-04-15 20:17:44.000000000 -0200
@@ -65,7 +65,33 @@ static inline int dccp_check_option_size
 static inline int dccp_check_option_suitable(struct dccp_hdr *dh,
 					     unsigned char *opt)
 {
-	return 0;
+	int	rc = 0;
+
+	switch (opt[2]) {
+	case DCCPO_MANDATORY:
+		if (dh->dccph_type == DCCP_PKT_DATA)
+			/* next option should be ignored */
+			rc = -2;
+		break;
+	case DCCPO_CHANGE_L:
+	case DCCPO_CONFIRM_L:
+	case DCCPO_CHANGE_R:
+	case DCCPO_CONFIRM_R:
+		if (dh->dccph_type == DCCP_PKT_DATA)
+			rc = -1;
+		break;
+	case DCCPO_INIT_COOKIE:
+	case DCCPO_ACK_VECTOR_0:
+	case DCCPO_ACK_VECTOR_1:
+	case DCCPO_DATA_DROPPED:
+	case DCCPO_ELAPSED_TIME:
+		if (dh->dccph_type == DCCP_PKT_REQUEST ||
+					dh->dccph_type == DCCP_PKT_DATA)
+			rc = -1;
+		break;
+	}
+
+	return rc;
 }
 
 /* TODO
