- int i;
-
- for (i = 0; i < chassis_rec->n_encaps; i++) {
- if (!strcmp(chassis_rec->encaps[i]->type, encap_type)
- && !strcmp(chassis_rec->encaps[i]->ip, encap_ip)) {
- /* Nothing changed. */
- inited = true;
- return;
- } else if (!inited) {
- VLOG_WARN("Chassis config changing on startup, make sure "
- "multiple chassis are not configured : %s/%s->%s/%s",
- chassis_rec->encaps[i]->type,
- chassis_rec->encaps[i]->ip,
- encap_type, encap_ip);
+ /* Compare desired tunnels against those currently in the database. */
+ uint32_t cur_tunnels = 0;
+ bool same = true;
+ for (int i = 0; i < chassis_rec->n_encaps; i++) {
+ cur_tunnels |= get_tunnel_type(chassis_rec->encaps[i]->type);
+ same = same && strcmp(chassis_rec->encaps[i]->ip, encap_ip);
+ }
+ same = same && req_tunnels == cur_tunnels;
+
+ if (same) {
+ /* Nothing changed. */
+ inited = true;
+ return;
+ } else if (!inited) {
+ struct ds cur_encaps = DS_EMPTY_INITIALIZER;
+ for (int i = 0; i < chassis_rec->n_encaps; i++) {
+ ds_put_format(&cur_encaps, "%s,",
+ chassis_rec->encaps[i]->type);