Unify MID generation and put it into mid_set.c
[olsrd.git] / src / build_msg.c
index 7bb885a..6901de1 100644 (file)
@@ -72,39 +72,12 @@ static uint8_t msg_buffer[MAXMESSAGESIZE - OLSR_HEADERSIZE];
 
 /* IPv4 */
 
-static bool serialize_mid4(struct interface *);
-
 static bool serialize_hna4(struct interface *);
 
 /* IPv6 */
 
-static bool serialize_mid6(struct interface *);
-
 static bool serialize_hna6(struct interface *);
 
-/**
- *Build a MID message to the outputbuffer
- *
- *<b>NO INTERNAL BUFFER</b>
- *@param ifn use this interfaces address as main address
- *@return 1 on success
- */
-
-bool
-queue_mid(struct interface *ifp)
-{
-  OLSR_INFO(LOG_PACKET_CREATION, "Building MID on %s\n-------------------\n", ifp->int_name);
-
-  switch (olsr_cnf->ip_version) {
-  case (AF_INET):
-    return serialize_mid4(ifp);
-  case (AF_INET6):
-    return serialize_mid6(ifp);
-  }
-  return false;
-}
-
-
 /**
  *Builds a HNA message in the outputbuffer
  *<b>NB! Not internal packetformat!</b>
@@ -140,180 +113,6 @@ check_buffspace(int msgsize, int buffsize, const char *type __attribute__ ((unus
   }
 }
 
-/**
- *IP version 4
- *
- *<b>NO INTERNAL BUFFER</b>
- *@param ifp use this interfaces address as main address
- *@return 1 on success
- */
-
-static bool
-serialize_mid4(struct interface *ifp)
-{
-  uint16_t remainsize, curr_size;
-  /* preserve existing data in output buffer */
-  union olsr_message *m;
-  struct midaddr *addrs;
-  struct interface *ifs;
-#if !defined REMOVE_LOG_DEBUG
-  struct ipaddr_str buf;
-#endif
-  if ((olsr_cnf->ip_version != AF_INET) || (!ifp) || list_is_empty(&interface_head)) {
-    return false;
-  }
-
-  remainsize = net_outbuffer_bytes_left(ifp);
-
-  m = (union olsr_message *)msg_buffer;
-
-  curr_size = OLSR_MID_IPV4_HDRSIZE;
-
-  /* Send pending packet if not room in buffer */
-  if (curr_size > remainsize) {
-    net_output(ifp);
-    remainsize = net_outbuffer_bytes_left(ifp);
-  }
-  check_buffspace(curr_size, remainsize, "MID");
-
-  /* Fill header */
-  m->v4.hopcnt = 0;
-  m->v4.ttl = MAX_TTL;
-  /* Set main(first) address */
-  m->v4.originator = olsr_cnf->router_id.v4.s_addr;
-  m->v4.olsr_msgtype = MID_MESSAGE;
-  m->v4.olsr_vtime = reltime_to_me(olsr_cnf->mid_params.validity_time);
-
-  addrs = m->v4.message.mid.mid_addr;
-
-  /* Don't add the main address... it's already there */
-  OLSR_FOR_ALL_INTERFACES(ifs) {
-    if (olsr_ipcmp(&olsr_cnf->router_id, &ifs->ip_addr) != 0) {
-      if ((curr_size + olsr_cnf->ipsize) > remainsize) {
-        /* Only add MID message if it contains data */
-        if (curr_size > OLSR_MID_IPV4_HDRSIZE) {
-          OLSR_DEBUG(LOG_PACKET_CREATION, "Sending partial(size: %d, buff left:%d)\n", curr_size, remainsize);
-          /* set size */
-          m->v4.olsr_msgsize = htons(curr_size);
-          m->v4.seqno = htons(get_msg_seqno()); /* seqnumber */
-
-          net_outbuffer_push(ifp, msg_buffer, curr_size);
-          curr_size = OLSR_MID_IPV4_HDRSIZE;
-          addrs = m->v4.message.mid.mid_addr;
-        }
-        net_output(ifp);
-        remainsize = net_outbuffer_bytes_left(ifp);
-        check_buffspace(curr_size, remainsize, "MID2");
-      }
-      OLSR_DEBUG(LOG_PACKET_CREATION, "\t%s(%s)\n", olsr_ip_to_string(&buf, &ifs->ip_addr), ifs->int_name);
-
-      addrs->addr = ifs->ip_addr.v4.s_addr;
-      addrs++;
-      curr_size += olsr_cnf->ipsize;
-    }
-  }
-  OLSR_FOR_ALL_INTERFACES_END(ifs);
-
-
-  m->v4.seqno = htons(get_msg_seqno()); /* seqnumber */
-  m->v4.olsr_msgsize = htons(curr_size);
-
-  if (curr_size > OLSR_MID_IPV4_HDRSIZE)
-    net_outbuffer_push(ifp, msg_buffer, curr_size);
-
-  return true;
-}
-
-
-
-/**
- *IP version 6
- *
- *<b>NO INTERNAL BUFFER</b>
- *@param ifp use this interfaces address as main address
- *@return 1 on success
- */
-
-static bool
-serialize_mid6(struct interface *ifp)
-{
-  uint16_t remainsize, curr_size;
-  /* preserve existing data in output buffer */
-  union olsr_message *m;
-  struct midaddr6 *addrs6;
-  struct interface *ifs;
-#if !defined REMOVE_LOG_DEBUG
-  struct ipaddr_str buf;
-#endif
-
-  if ((olsr_cnf->ip_version != AF_INET6) || (!ifp) || list_is_empty(&interface_head)) {
-    return false;
-  }
-
-  remainsize = net_outbuffer_bytes_left(ifp);
-
-  curr_size = OLSR_MID_IPV6_HDRSIZE;
-
-  /* Send pending packet if not room in buffer */
-  if (curr_size > remainsize) {
-    net_output(ifp);
-    remainsize = net_outbuffer_bytes_left(ifp);
-  }
-  check_buffspace(curr_size, remainsize, "MID");
-
-  m = (union olsr_message *)msg_buffer;
-
-  /* Build header */
-  m->v6.hopcnt = 0;
-  m->v6.ttl = MAX_TTL;
-  m->v6.olsr_msgtype = MID_MESSAGE;
-  m->v6.olsr_vtime = reltime_to_me(olsr_cnf->mid_params.validity_time);
-
-  /* Set main(first) address */
-  m->v6.originator = olsr_cnf->router_id.v6;
-
-  addrs6 = m->v6.message.mid.mid_addr;
-
-  /* Don't add the main address... it's already there */
-  OLSR_FOR_ALL_INTERFACES(ifs) {
-    if (olsr_ipcmp(&olsr_cnf->router_id, &ifs->ip_addr) != 0) {
-      if ((curr_size + olsr_cnf->ipsize) > remainsize) {
-        /* Only add MID message if it contains data */
-        if (curr_size > OLSR_MID_IPV6_HDRSIZE) {
-          OLSR_DEBUG(LOG_PACKET_CREATION, "Sending partial(size: %d, buff left:%d)\n", curr_size, remainsize);
-          /* set size */
-          m->v6.olsr_msgsize = htons(curr_size);
-          m->v6.seqno = htons(get_msg_seqno()); /* seqnumber */
-
-          net_outbuffer_push(ifp, msg_buffer, curr_size);
-          curr_size = OLSR_MID_IPV6_HDRSIZE;
-          addrs6 = m->v6.message.mid.mid_addr;
-        }
-        net_output(ifp);
-        remainsize = net_outbuffer_bytes_left(ifp);
-        check_buffspace(curr_size + olsr_cnf->ipsize, remainsize, "MID2");
-      }
-      OLSR_DEBUG(LOG_PACKET_CREATION, "\t%s(%s)\n", olsr_ip_to_string(&buf, &ifs->ip_addr), ifs->int_name);
-
-      addrs6->addr = ifs->ip_addr.v6;
-      addrs6++;
-      curr_size += olsr_cnf->ipsize;
-    }
-  }
-  OLSR_FOR_ALL_INTERFACES_END(ifs);
-
-  m->v6.olsr_msgsize = htons(curr_size);
-  m->v6.seqno = htons(get_msg_seqno()); /* seqnumber */
-
-  if (curr_size > OLSR_MID_IPV6_HDRSIZE)
-    net_outbuffer_push(ifp, msg_buffer, curr_size);
-
-  return true;
-}
-
-
-
-
 /**
  *IP version 4
  *