sgb2ns.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1997 by the University of Southern California
  3.  * All rights reserved.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software and its
  6.  * documentation in source and binary forms for non-commercial purposes
  7.  * and without fee is hereby granted, provided that the above copyright
  8.  * notice appear in all copies and that both the copyright notice and
  9.  * this permission notice appear in supporting documentation. and that
  10.  * any documentation, advertising materials, and other materials related
  11.  * to such distribution and use acknowledge that the software was
  12.  * developed by the University of Southern California, Information
  13.  * Sciences Institute.  The name of the University may not be used to
  14.  * endorse or promote products derived from this software without
  15.  * specific prior written permission.
  16.  *
  17.  * THE UNIVERSITY OF SOUTHERN CALIFORNIA makes no representations about
  18.  * the suitability of this software for any purpose.  THIS SOFTWARE IS
  19.  * PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
  20.  * INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  21.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  22.  *
  23.  * Other copyrights might apply to parts of this software and are so
  24.  * noted when applicable.
  25.  *
  26.  * sgb2ns.c -- converter from sgb format to ns-2 configuration. 
  27.  * $Id: sgb2ns.c,v 1.2 1998/07/20 21:49:26 haldar Exp $
  28.  *
  29.  * Daniel Zappala (daniel@isi.edu) wrote for converting GT-ITM's output to
  30.  *   ns-1.
  31.  * Polly Huang (phuang@catarina.usc.edu) and Haobo Yu (haoboy@isi.edu) 
  32.  *   ported to ns-2.
  33.  *
  34.  * Maintainer: Haobo Yu (haoboy@isi.edu)
  35.  *
  36.  */
  37. #include <stdio.h>
  38. #include <strings.h>
  39. #include "gb_graph.h"
  40. #include "gb_save.h"
  41. #include "geog.h"
  42. main(argc,argv)
  43.      int argc;
  44.      char *argv[];
  45. {
  46. int i, j, nlink;
  47. Vertex *v;
  48. Arc *a;
  49. Graph *g;
  50. FILE *fopen(), *fout;
  51. char m[420];
  52. if (argc != 3) {
  53. printf("sgb2ns <sgfile> <nsfile>nn");
  54. return;
  55. }
  56. fout = fopen(argv[2],"w");
  57. g = restore_graph(argv[1]);
  58. if (g == NULL) {
  59. printf("%s does not contain a correct SGB graphn",argv[1]);
  60. return;
  61. }
  62. fprintf(fout, "# Generated by sgb2ns, created by Polly Huangn");
  63. fprintf(fout, "# GRAPH (#nodes #edges id uu vv ww xx yy zz):n");
  64. fprintf(fout, "# %d %d %s ",g->n, g->m, g->id);
  65. if (g->util_types[8] == 'I') fprintf(fout,"%ld ",g->uu.I);
  66. if (g->util_types[9] == 'I') fprintf(fout,"%ld ",g->vv.I);
  67. if (g->util_types[10] == 'I') fprintf(fout,"%ld ",g->ww.I);
  68. if (g->util_types[11] == 'I') fprintf(fout,"%ld ",g->xx.I);
  69. if (g->util_types[12] == 'I') fprintf(fout,"%ld ",g->yy.I);
  70. if (g->util_types[13] == 'I') fprintf(fout,"%ld ",g->zz.I);
  71. fprintf(fout,"nn");
  72. fprintf(fout, "proc create-topology {nsns node linkBW} {n");
  73. fprintf(fout, "tupvar $node nn");
  74. fprintf(fout, "tupvar $nsns nsnn");
  75. fprintf(fout,"tset verbose 1nn");
  76. /* nodes */
  77. fprintf(fout, "tif {$verbose} { n");
  78. fprintf(fout, "ttputs "creating nodes..." n");
  79. fprintf(fout, "}n");
  80. fprintf(fout, "ttfor {set i 0} {$i < %d} {incr i} {n", g->n);
  81. fprintf(fout, "tttset n($i) [$ns node]n");
  82. fprintf(fout, "t}n");
  83. fprintf(fout, "n");
  84. /* edges */
  85. fprintf(fout, "t# EDGES (from-node to-node length a b):n");
  86. nlink = 0;
  87. fprintf(fout, "tif {$verbose} { n");
  88. fprintf(fout, "ttputs -nonewline "Creating links 0..."n");
  89. fprintf(fout, "ttflush stdout n");
  90. fprintf(fout, "t}n");
  91. for (v = g->vertices,i=0; i < g->n; i++,v++) 
  92. for (a = v->arcs; a != NULL; a = a->next) {
  93. j = a->tip - g->vertices;
  94. if (j > i) {
  95. fprintf(fout, 
  96. "t$ns duplex-link-of-interfaces $n(%d) $n(%d) $linkBW %dms DropTailn",
  97. i, j, 10 * a->len);
  98. nlink++;
  99. if ((nlink % 10) == 0) {
  100. fprintf(fout,
  101. "tif {$verbose} { puts -nonewline "%d..."; flush stdout }n", 
  102. nlink);
  103. }
  104. }
  105. }
  106. fprintf(fout, "ntif {$verbose} { n");
  107. fprintf(fout, "ttputs -nonewline "%d..."n", nlink);
  108. fprintf(fout, "ttflush stdoutn");
  109. fprintf(fout, "ttputs "starting"n");
  110. fprintf(fout, "t}n");
  111. /* srm members. join-group will be performed by Agent/SRM::start */
  112. /* return the number of nodes in this topology */
  113. fprintf(fout, "treturn %d", g->n);
  114. fprintf(fout, "}n");
  115. }