}
static void
-mrt_dump_message(buffer *b, int fd)
+mrt_dump_message(buffer *b, struct rfile *rf)
{
uint len = mrt_buffer_pos(b);
ASSERT(len >= MRT_HDR_LENGTH);
put_u32(b->start + 8, len - MRT_HDR_LENGTH);
- if (fd < 0)
+ if (!rf)
return;
- if (write(fd, b->start, len) < 0)
+ if (write(rf_fileno(rf), b->start, len) < 0)
log(L_ERR "Write to MRT file failed: %m"); /* TODO: name of file */
}
return 0;
}
- s->fd = rf_fileno(s->file);
s->time_offset = now_real - now;
return 1;
{
rfree(s->file);
s->file = NULL;
- s->fd = -1;
}
/* Fix Peer Count */
put_u16(s->buf.start + s->peer_count_offset, s->peer_count);
- mrt_dump_message(&s->buf, s->fd);
+ mrt_dump_message(&s->buf, s->file);
}
static void
return;
s->seqnum++;
- mrt_dump_message(&s->buf, s->fd);
+ mrt_dump_message(&s->buf, s->file);
}
/*
OBSREF_SET(s->config, OBSREF_GET(config));
- s->fd = -1;
-
return s;
}
mrt_init_message(b, MRT_BGP4MP, subtypes[d->as4 + 4*d->add_path]);
mrt_bgp_header(b, d);
mrt_put_data(b, d->message, d->msg_len);
- mrt_dump_message(b, rf_fileno(OBSREF_GET(config)->mrtdump_file));
+ mrt_dump_message(b, OBSREF_GET(config)->mrtdump_file);
mrt_buffer_free(b);
}
mrt_bgp_header(b, d);
mrt_put_u16(b, states[d->old_state]);
mrt_put_u16(b, states[d->new_state]);
- mrt_dump_message(b, rf_fileno(OBSREF_GET(config)->mrtdump_file));
+ mrt_dump_message(b, OBSREF_GET(config)->mrtdump_file);
mrt_buffer_free(b);
}
u16 entry_count; /* Number of RIB Entries */
u32 entry_count_offset; /* Buffer offset to store entry_count later */
- struct rfile *file; /* tracking for mrt table dump file */
- int fd;
+ struct rfile *file; /* Table dump file */
event *event; /* defer event */
event_list *target; /* defer target */