Commit bf4e5a60 authored by Jan Maria Matejka's avatar Jan Maria Matejka
Browse files

TMP

parent 26fdd947
Loading
Loading
Loading
Loading
+62 −60
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@

#define RET(ftype,member,value) return (struct f_val) { .type = ftype, .val.member = (value) }
#define RET_VOID return (struct f_val) { .type = T_VOID }
#define RETA(member,value) RET(what->aux, member, value)

#define FI_INST_NUMERIC_BINARY(name,op) \
  FI_INST_INTERPRET(name) \
@@ -319,39 +320,37 @@ F_INST_INTERPRET(rta_get)
{
  ACCESS_RTE;
  struct rta *rta = (*f_rte)->attrs;
  res.type = what->aux;

  switch (what->a2.i)
  {
  case SA_FROM:	res.val.px.ip = rta->from; break;
  case SA_GW:	res.val.px.ip = rta->gw; break;
  case SA_NET:	res.val.px.ip = (*f_rte)->net->n.prefix;
		    res.val.px.len = (*f_rte)->net->n.pxlen; break;
  case SA_PROTO:	res.val.s = rta->src->proto->name; break;
  case SA_SOURCE:	res.val.i = rta->source; break;
  case SA_SCOPE:	res.val.i = rta->scope; break;
  case SA_CAST:	res.val.i = rta->cast; break;
  case SA_DEST:	res.val.i = rta->dest; break;
  case SA_IFNAME:	res.val.s = rta->iface ? rta->iface->name : ""; break;
  case SA_IFINDEX:	res.val.i = rta->iface ? rta->iface->index : 0; break;
  case SA_FROM:		RETA(px.ip, rta->from);
  case SA_GW:		RETA(px.ip, rta->gw);
  case SA_NET:		RETA(px, {
			    .ip = (*f_rte)->net->n.prefix,
			    .len = (*f_rte)->net->n.pxlen
			});
  case SA_PROTO:	RETA(s, rta->src->proto->name);
  case SA_SOURCE:	RETA(i, rta->source);
  case SA_SCOPE:	RETA(i, rta->scope); break;
  case SA_CAST:		RETA(i, rta->cast); break;
  case SA_DEST:		RETA(i, rta->dest); break;
  case SA_IFNAME:	RETA(s, rta->iface ? rta->iface->name : "");
  case SA_IFINDEX:	RETA(i, rta->iface ? rta->iface->index : 0);

  default:
    bug("Invalid static attribute access (%x)", res.type);
    bug("Invalid static attribute access (%x)", what->aux);
  }

  RET_VOID;

}
}
    break;
  case P('a','S'):

F_INST_INTERPRET(rta_set)
{
  AI(1);
  ACCESS_RTE;
    ONEARG;
  if (what->aux != v1.type)
    runtime( "Attempt to set static attribute to incompatible type" );

  f_rta_cow();
    {
  struct rta *rta = (*f_rte)->attrs;

  switch (what->a2.i)
@@ -392,9 +391,12 @@ F_INST_INTERPRET(rta_get)
    break;

  default:
	bug("Invalid static attribute access (%x)", res.type);
    bug("Invalid static attribute access (%x)", what->a2.i);
  }
  RET_VOID;
}


  break;
  case P('e','a'):	/* Access to extended attributes */
    ACCESS_RTE;