hi everyone,
 
i installed ns-2.1b8-mcast on RedHat7, it seems that i installed correctly (i 
run one of the ns examples)
then i try to run ADMR protocol, i try the command from README 
(http://www.monarch.cs.rice.edu/ftp/multicast/README)
 
./ns scripts/run.tcl -x 1200 -y 800 -nn 100 -stop 900 -tr TRACES/out.tr -mg 
mcast_communication_scenarios/cbr_100_4x64_3x3x20_mcast_ns_rs -sc 
movement_scenarios/scen-1200x800-100-0-20-1 -rp admr > & TRACES/sim_stdoutput

after 31 minutes it gives me segmentation fault, but when i look at TRACES 
folder, there are two files, (sim_stdoutput, out.tr)
 
i don't know where is the problem, is it  from admr.tcl file? i attache both 
run.tcl and admr.tcl,
 
please help me, i really need it for my dessertation, but no result yet.


      
# File name:     admr.tcl 
# Last revision: May 13, 2002
# Created by:    Jorjeta G. Jetcheva (jorje...@cs.cmu.edu)

# Copyright (c) 2002, 2003 Rice University.  All Rights Reserved. 
# Permission to use, copy, modify, and distribute this software and 
# its documentation is hereby granted (including for commercial or 
# for-profit use), provided that both the copyright notice and this 
# permission notice appear in all copies of the software, derivative 
# works, or modified versions, and any portions thereof, and that both 
# notices appear in supporting documentation, and that credit is given 
# to Rice University in all publications reporting on direct or indirect 
# use of this code or its derivatives.

# ALL CODE, SOFTWARE, PROTOCOLS, AND ARCHITECTURES DEVELOPED BY THE Rice
# MONARCH PROJECT ARE EXPERIMENTAL AND ARE KNOWN TO HAVE BUGS, SOME OF
# WHICH MAY HAVE SERIOUS CONSEQUENCES. RICE PROVIDES THIS SOFTWARE OR 
# OTHER INTELLECTUAL PROPERTY IN ITS ``AS IS'' CONDITION, AND ANY EXPRESS 
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
# DISCLAIMED. IN NO EVENT SHALL RICE UNIVERSITY BE LIABLE FOR ANY DIRECT, 
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE OR INTELLECTUAL PROPERTY, 
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Rice University encourages (but does not require) users of this
# software or intellectual property to return any improvements or
# extensions that they make, and to grant Rice University the rights to
# redistribute these changes without encumbrance.


# ======================================================================
# Default Script Options
# ======================================================================

set opt(rt_port) 255
set mcast_base_addr 0x8000

Agent/RTRAgent set sport_ 254
Agent/RTRAgent set dport_ 254
Agent/RTRAgent set mcast_base_address_ $mcast_base_addr

Agent/UniAgent set sport_ 255
Agent/UniAgent set dport_ 255

Agent/ADMRAgent set sport_ 255
Agent/ADMRAgent set dport_ 255
Agent/ADMRAgent set mcast_base_address_ $mcast_base_addr

Mac/802_11 set mcast_base_address_ $mcast_base_addr 

Class McastNode -superclass Node/MobileNode

McastNode instproc init {args} {
    global opt ns_ tracefd RouterTrace
    $self instvar rtr_agent_ admr_agent_ uni_agent_ dmux_ mcast_dmux_ 
entry_point_

    eval $self next $args       ;# parent class constructor

    # puts "making dmragent for node [$self id]"
    set rtr_agent_ [new Agent/RTRAgent]
    $rtr_agent_ ip-addr [$self id]

    set uni_agent_ [new Agent/UniAgent]
    $uni_agent_ ip-addr [$self id]

    set admr_agent_ [new Agent/ADMRAgent]
    $admr_agent_ ip-addr [$self id]

    if { $RouterTrace == "ON" } {
        # Recv Target
        set rcvT [cmu-trace Recv "ADM" $self]
        $rcvT target $rtr_agent_
        set entry_point_ $rcvT  
    } else {
        # Recv Target
        set entry_point_ $rtr_agent_
    }

    #
    # Drop Target (always on regardless of other tracing)
    #
    set drpT [cmu-trace Drop "ADM" $self]

    $rtr_agent_ drop-target $drpT
    $uni_agent_ drop-target $drpT
    $admr_agent_ drop-target $drpT

    #
    # Log Target
    #
    set T [new Trace/Generic]
    $T target [$ns_ set nullAgent_]
    $T attach $tracefd
    $T set src_ [$self id]

    $rtr_agent_ log-target $T
    $uni_agent_ log-target $T
    $admr_agent_ log-target $T

    # jj: not sure abt mask
    set mcast_dmux_ [new Classifier/Addr]
    $mcast_dmux_ set mask_ 0xffffffff
    $mcast_dmux_ set shift_ 0
    $self add-route [$self id] $mcast_dmux_ 

    # ported: this was in MobileNode but they removed it
    set dmux_ [new Classifier/Addr]
    $dmux_ set mask_ 0xff
    $dmux_ set shift_ 0
    $self add-route [$self id] $dmux_


    $rtr_agent_ target $uni_agent_
    $rtr_agent_ mcast_target $admr_agent_
    $uni_agent_ target $dmux_
    $admr_agent_ target $mcast_dmux_

    # packets to the ADMR port should be dropped, since we've
    # already handled them in the ADMRAgent at the entry.
    set nullAgent_ [$ns_ set nullAgent_]
    $dmux_ install $opt(rt_port) $nullAgent_

    $mcast_dmux_ install $opt(rt_port) $nullAgent_

    # McastNodes don't use the IP addr classifier.  The ADMRAgent should
    # be the entry point
    $self instvar classifier_
    set classifier_ "mcastnode made illegal use of classifier_"
    
}


McastNode instproc start-rtr {} {
    $self instvar rtr_agent_ admr_agent_ uni_agent_
    global opt;

    $rtr_agent_ startrtr
    $admr_agent_ startadmr
    $uni_agent_ startuni
#    if {$opt(cc) == "on"} {checkcache admr_agent_} jj: commented this out
}

McastNode instproc entry {} {
        $self instvar entry_point_
        return $entry_point_
}

McastNode instproc add-interface {args} {
# args are expected to be of the form
# $chan $prop $tracefd_ $opt(ll) $opt(mac)
    global ns_ opt RouterTrace

    eval $self next $args

    $self instvar admr_agent_ uni_agent_ ll_ mac_ ifq_

    $admr_agent_ mac-addr [$mac_(0) id]
    $uni_agent_ mac-addr [$mac_(0) id]

    if { $RouterTrace == "ON" } {
        # Send Target
        set sndT_mcast [cmu-trace Send "ADM" $self]
        set sndT_unicast [cmu-trace Send "ADM" $self]

        $sndT_mcast target $ll_(0)
        $sndT_unicast target $ll_(0)

        $uni_agent_ add-ll $sndT_unicast $ifq_(0)
        $admr_agent_ add-ll $sndT_mcast $ifq_(0)
    } else {
        # Send Target
        $uni_agent_ add-ll $ll_(0) $ifq_(0)
        $admr_agent_ add-ll $ll_(0) $ifq_(0)
    }
    
    # setup promiscuous tap into mac layer
    #$admr_agent_ install-tap $mac_(0)

}

McastNode instproc reset args {
    $self instvar admr_agent_ rtr_agent_ uni_agent_
    eval $self next $args

    $rtr_agent_ reset
    $uni_agent_ reset
    $admr_agent_ reset
}

# ======================================================================

proc create-mcast-mobile-node { id cid } {
        global ns_ topo tracefd opt node_ nifs_
        global radio_setup_ channel_ channel_mod_ nodemgr_

        set node_($id) [new McastNode]

        set node $node_($id)
        
        $node random-motion 0           ;# disable random motion
        $node topography $topo

        # ============================================================
        # connect up the channel
        # XXX: need to make a better way of mapping nodes to 
        #      channels/interfaces. - josh
        # ============================================================
        set nifs_       0       
        $node add-interface $channel_(0)                        \
                            [new $opt(prop)] \
                            $opt(ll)                            \
                            $opt(mac)           \
                            $opt(ifq)  \
                            $opt(ifqlen) \
                            $opt(netif)         \
                            $opt(ant)                                 \
                            $opt(errmodel) $opt(em)        

  
        # ============================================================
        # Register Node with Node Manager
        # ============================================================
#        $nodemgr_ register-node $node

        #
        # This Trace Target is used to log changes in direction
        # and velocity for the mobile node and log actions of the ADMR agent
        #
        set T [new Trace/Generic]
        $T target [$ns_ set nullAgent_]
        $T attach $tracefd
        $T set src_ $id
        $node log-target $T

        $ns_ at 0.0 "$node start-rtr"
}

#
# Attach an mcast agent to a node.  Pick a port and
# bind the agent to the port number.
#

McastNode instproc mcast-attach { agent { port "" } } {

        global RouterTrace AgentTrace opt

        $self instvar agents_ mcast_dmux_ imep_ ll_

        set id_ [$self id]

        #
        # assign port number (i.e., this agent receives
        # traffic addressed to this host and port)
        #
        # jj: if you want to assign a specific port, the nports thing will 
break...
        lappend agents_ $agent
        if { $port == "" } {
                set port [$self alloc-port]
        }
        
        $agent set portID_ $port
        $agent set node_ $self
        $agent set addr_ $id_
        $agent set sport_ $port
        
        #
        # non-routing agents
        #
        if { $AgentTrace == "ON" } {
            #
            # Send Target
            #
            set sndT [cmu-trace Send AGT $self]
            $sndT target [$self entry]
            $agent target $sndT
            
            #
            # Recv Target
            #
            set rcvT [cmu-trace Recv AGT $self]
            $rcvT target $agent
            $mcast_dmux_ install $port $rcvT
        } else {
            #
            # Send Target
            #
            $agent target [$self entry]
            
            #
            # Recv Target
            #
            $mcast_dmux_ install $port $agent
        }
    }


#
# Detach an agent from a node.
#
McastNode instproc mcast-detach { agent nullagent } {
        $self instvar agents_ mcast_dmux_
        #
        # remove agent from list
        #

        set k [lsearch -exact $agents_ $agent]
        if { $k >= 0 } {
                set agents_ [lreplace $agents_ $k $k]
        }

        #
        # sanity -- clear out any potential linkage
        #
        $agent set node_ ""
        $agent set addr_ 0
        $agent target $nullagent

        set port [$agent set portID_]
        $mcast_dmux_ install $port $nullagent
}

# detach a multicast agent
McastNode instproc mcast-detach-agent { node agent } {
        $self instvar nullAgent_
        $node detach $agent $nullAgent_
}

# attach a mcast source to a node

McastNode instproc mcast-attach-source {node agent mcast_group_address} {
        $self mcast-attach $agent $mcast_group_address

        $agent set dst_addr_ $mcast_group_address 
        $agent set dst_port_ $mcast_group_address
}


#create a mcast connection

McastNode instproc mcast-create-source {s_type source mcast_group_address 
pktClass stime} {
        $self instvar admr_agent_ 
        global ns_
    
        set s_agent [new Agent/$s_type]
#        set app [new Application/Traffic/$s_type]
        
#        $app attach-agent $s_agent

        $s_agent set fid_ $pktClass

#        $ns_ attach-agent $source $s_agent

        $self mcast-attach-source $source $s_agent $mcast_group_address
        
        $ns_ at $stime "$admr_agent_ mcast-src"

        return $s_agent
}


# attach a mcast sink to a node

McastNode instproc mcast-attach-sink {node agent mcast_group_address} {
        $node mcast-attach $agent $mcast_group_address
}

# create a mcast group sink

McastNode instproc mcast-create-sink {s_type mcast_group_address pktClass} {

    set s_agent [new Agent/$s_type] ;# jj make general?
    
#    set app [new Application/Traffic/$s_type]
#    $app attach-agent $s_agent
    
    $s_agent set fid_ $pktClass
    $self mcast-attach-sink $self $s_agent $mcast_group_address
    
    return $s_agent
}

McastNode instproc mcast-destroy-sink {agent} {
    $self mcast-detach $agent [new Agent/Null]
}


McastNode instproc join-group { s_type mcast_group src_addr pktClass } {
    $self instvar admr_agent_ sink mac_ 
    
    # attach an agent for the group here
    $admr_agent_ join-group $mcast_group $src_addr
#    $admr_agent_ join-group $mcast_group $mcast_group
    set sink($mcast_group) [$self mcast-create-sink $s_type $mcast_group 
$pktClass]
}

McastNode instproc leave-group {mcast_group source_addr} {
    $self instvar admr_agent_ sink mac_ 

    $admr_agent_ leave-group $mcast_group $source_addr

    $self mcast-destroy-sink $sink($mcast_group)
}


McastNode instproc scale-power { factor } {
    $self instvar netif_ 
# hack

    set iface $netif_(0)
    set iface_pt [$iface set Pt_]
    
    set new_pt  [expr $iface_pt*$factor]

    $iface set Pt_ $new_pt
}

Reply via email to