/* Route just has REF_FILTERED flag */
static inline int rte_is_filtered(rte *r) { return !!(r->flags & REF_FILTERED); }
+/* Strip the route of the table-specific values */
+static inline rte rte_init_from(const rte *r)
+{
+ return (rte) {
+ .attrs = r->attrs,
+ .net = r->net,
+ .src = r->src,
+ };
+}
+
struct rte_src {
struct rte_src *next; /* Hash chain */
struct rte_owner *owner; /* Route source owner */
/* Restart reload */
if (c->reload_pending)
+ {
+ c->reload_pending = 0;
channel_request_reload(c);
+ }
if (c->channel_state != CS_UP)
channel_check_stopped(c);
for (uint i=0; i<count; i++)
if (feed[i]->sender == c->in_req.hook)
{
+ /* Strip the table-specific information */
+ rte new = rte_init_from(feed[i]);
+
/* Strip the later attribute layers */
- rte new = *feed[i];
while (new.attrs->next)
new.attrs = new.attrs->next;
if (new)
{
- rte e0 = {
- .attrs = new->attrs,
- .src = new->src,
- .generation = new->generation + 1,
- };
+ rte e0 = rte_init_from(new);
+ e0.generation = new->generation + 1;
ea_unset_attr(&e0.attrs, 0, &ea_gen_hostentry);
rte_update(dst, n, &e0, new->src);