}
}
+static int
+rip_pat_compare(struct rip_patt *a, struct rip_patt *b)
+{
+ return ((a->metric == b->metric) &&
+ (a->mode == b->mode));
+}
+
static int
rip_reconfigure(struct proto *p, struct proto_config *c)
{
struct rip_proto_config *new = (struct rip_proto_config *) c;
int generic = sizeof(struct proto_config) + sizeof(list) /* + sizeof(struct password_item *) */;
- /* FIXME: patt_same needed */
- return 0;
-
+ if (!iface_patts_equal(&P_CF->iface_list, &new->iface_list, (void *) rip_pat_compare))
+ return 0;
if (!password_same(P_CF->passwords,
new->passwords))
return 0;
struct rip_patt {
struct iface_patt i;
- int metric;
+ int metric; /* If you add entries here, don't forget to modify patt_compare! */
int mode;
#define IM_BROADCAST 2
#define IM_QUIET 4
list iface_list; /* Patterns configured -- keep it first; see rip_reconfigure why */
struct password_item *passwords; /* Passwords, keep second */
- int infinity; /* User configurable data */
+ int infinity; /* User configurable data; must be comparable with memcmp */
int port;
int period;
int garbage_time;