Run Time Error: perhaps its code was not linked in, or the class wasn't registered with Register_Class()/Define_Module()/Define_Channel()? - omnet++

I have already declared Define_Module(veins:: TraCIDateDissemination) and go through with various suggestions provided but getting this error again. Any suggestion is welcome. please help.
How to register a new class (new application) in Omnet++
Error in module during network setup:
Class "simpleModule" not found in omnetpp
https://doc.omnetpp.org/omnetpp/manual/
In manual I checked -
7.12.3 Class Registration
You should also use the Register_Class() macro to register the new class. It is used by the createOne() factory function, which can create any object given the class name as a string. createOne() is used by the Envir library to implement omnetpp.ini options such as rng-class="..." or scheduler-class="...". (see Chapter [17])
But not able to understand. pls help.
A runtime error occurred:
Class "TraCIDataDissemination" not found -- perhaps its code was not linked in, or the class wasn't registered with Register_Class(), or in the case of modules and channels, with Define_Module()/Define_Channel() -- in module (omnetpp::cModule) RSUExampleScenario.node[0] (id=13), at t=1s, event #2
Launch a debugger with the following command?
nemiver --attach=20070 &
OMNET.INI
##########################################################
# App Layer #
##########################################################
#*.node[*].applType = "TraCIDemo11p"
*.node[*].applType = "TraCIDataDissemination"
*.node[*].appl.headerLength = 80 bit
TraCIDataDissemination.h
namespace veins {
class TraCIDataDissemination : public DemoBaseApplLayer {
public:
{
//my code
}
}
TraCIDataDissemination.cc
#include "veins/modules/application/traci/TraCIDataDissemination.h"
#include<math.h>
using namespace veins;
Define_Module(veins::TraCIDataDissemination);
//code
TraCIDataDissemination.ned
package org.car2x.veins.modules.application.traci;
import org.car2x.veins.modules.application.ieee80211p.DemoBaseApplLayer;
simple TraCIDataDissemination extends DemoBaseApplLayer
{
#class(TraCIDataDissemination);
#display("i=block/app2");
}
Please Help!!

Related

Cannot connect .ned file with its .h and .cc files

I have the following simple module
PythonConnection.ned
simple PythonConnection {
#class(PythonConnection);
// my code
}
PythonConnection.h
#include <omnetpp.h>
class PythonConnection : public omnetpp::cSimpleModule {
//my code
}
PythonConnection.cc
#include "PythonConnection.h"
Define_Module(PythonConnection);
void PythonConnection::initialize() {
//my code
}
all of them are located in the same directory.
I am importing this simple module in circles.ned file
package circles;
import PythonConnection;
network circles
{
submodules:
python_connection: PythonConnection;
}
But I do not understand why I keep getting
A runtime error occurred:
Class "PythonConnection" not found -- perhaps its code was not linked in, or the class wasn't registered with Register_Class(), or in the case of modules and channels, with Define_Module()/Define_Channel() -- in module (omnetpp::cModule) circles (id=1), during network setup
when I launch the program. Could somebody help?
My problem was that I have created General project. To make it work, OMNeT++ Project is required.

How to register InternalRow with Kryo in Spark

I want to run Spark with Kryo serialisation. Therefore I set spark.serializer=org.apache.spark.serializer.KryoSerializer and spark.kryo.registrationRequired=true
When I then run my code I get the error:
Class is not registered: org.apache.spark.sql.catalyst.InternalRow[]
According to this post I used
sc.getConf.registerKryoClasses(Array( classOf[ org.apache.spark.sql.catalyst.InternalRow[_] ] ))
But then the error is:
org.apache.spark.sql.catalyst.InternalRow does not take type parameters
you should use an external class as
class MyRegistrator extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[Array[org.apache.spark.sql.catalyst.InternalRow]])
}
}
source : http://spark.apache.org/docs/0.6.0/tuning.html
Or if you want to register in your spark class
val cls: Class[Array[InternalRow]] = classOf[Array[org.apache.spark.sql.catalyst.InternalRow]]
spark.sparkContext.getConf.registerKryoClasses(Array(cls))
I use the first one and works perfectly, I haven't tested the second one.

Omnet++ simple wireless node

Iam trying to create simple wireless node for MANET network which can send messages to other nodes in range. Solutions implemented in INET also contains other layers like IP, transport, application which i dont need.
Iam new to omnet++ so iam struggling a bit. I was thinking of creating whole own node with RadioIn input, but i dont know how to implement only in range communication and i will also need node mobility.
Other solutions would be to use only Radiomedium from INET framework but i dont know how to do it.
Can someone please give me some begginer tips how to achieve my goal? As i said i simply need to create mobile host which can send a defined message to all other hosts in range.
EDIT: I tried to take IdealRadioMedium and create my simple module and connect to it. Here is the NED File.
import inet.physicallayer.common.packetlevel.Radio;
import inet.common.figures.DelegateSignalConfigurator;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.node.inet.INetworkNode;
import inet.node.inet.WirelessHost;
import inet.physicallayer.contract.packetlevel.IRadioMedium;
import inet.visualizer.integrated.IntegratedCanvasVisualizer;
import inet.linklayer.contract.IWirelessNic;
import inet.networklayer.common.InterfaceTable;
simple Txc1
{
gates:
input in;
output out;
}
module Pokusny
{
parameters:
#display("i=device/wifilaptop");
int numRadios = default(1);
#networkNode;
gates:
input radioIn[numRadios] #directIn;
submodules:
mynode: Txc1;
wlan[numRadios]: <default("Ieee80211Nic")> like IWirelessNic {
parameters:
#display("p=216,406,row,60;q=queue");
}
interfaceTable: InterfaceTable {
parameters:
#display("p=53,300;is=s");
}
connections allowunconnected:
for i=0..sizeof(radioIn)-1 {
radioIn[i] --> { #display("m=s"); } --> wlan[i].radioIn;
wlan[i].upperLayerOut --> mynode.in;
wlan[i].upperLayerIn <-- mynode.out;
}
}
network WirelessC
{
parameters:
string hostType = default("WirelessHost");
string mediumType = default("IdealRadioMedium");
#display("bgb=650,500;bgg=100,1,grey95");
#figure[title](type=label; pos=0,-1; anchor=sw; color=darkblue);
#figure[rcvdPkText](type=indicatorText; pos=420,20; anchor=w; font=,20; textFormat="packets received: %g"; initialValue=0);
#statistic[rcvdPk](source=hostB_rcvdPk; record=figure(count); targetFigure=rcvdPkText);
#signal[hostB_rcvdPk];
#delegatesignal[rcvdPk](source=hostB.udpApp[0].rcvdPk; target=hostB_rcvdPk);
submodules:
visualizer: IntegratedCanvasVisualizer {
#display("p=580,125");
}
configurator: IPv4NetworkConfigurator {
#display("p=580,200");
}
radioMedium: <mediumType> like IRadioMedium {
#display("p=580,275");
}
//figureHelper: DelegateSignalConfigurator {
// #display("p=580,350");
//}
hostA: Pokusny {
#display("p=50,325");
}
hostB: Pokusny {
#display("p=450,325");
}
}
Txc1.cc
class Txc1 : public cSimpleModule
{
protected:
// The following redefined virtual function holds the algorithm.
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
};
// The module class needs to be registered with OMNeT++
Define_Module(Txc1);
void Txc1::initialize()
{
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
}
void Txc1::handleMessage(cMessage *msg)
{
send(msg, "out"); // send out the message
}
And .ini file
network = WirelessC
sim-time-limit = 25s
*.host*.wlan[0].typename = "IdealWirelessNic"
*.host*.wlan[0].mac.useAck = false
*.host*.wlan[0].mac.fullDuplex = false
*.host*.wlan[0].radio.transmitter.communicationRange = 500m
*.host*.wlan[0].radio.receiver.ignoreInterference = true
*.host*.**.bitrate = 1Mbps
When i run the simulation it asks for Interfacetable parameter which i dont know what to type there becuse i havent found it in traversing functioning code ( I had to add it because it throws error that is missing if its not as submodule). Now iam getting
getCointainingNode() node module not found it should have a property name networkNode for module WirelessC.interfaceTable in module .... durint network initialization
EDIT: I added networknode as parameter and now i got Module not found on path '.mobility' defined by par WirelessC.hostA.wlan[0].radio.antenna.Mobilitymodule in module inte::physicallayer:IsotropicAntenna during network initialization
I'd like to point you to the wireless tutorial for INET: https://omnetpp.org/doc/inet/api-current/tutorials/wireless/
It starts with exactly your problem. The only thing left, is to replace the standard UDP host with a host using no protocol at all, maybe even implementing your own. The whole wireless part is explained in the tutorial.
If you want to check the source files for the used modules you need to walk down the chain of dependency since every compound NED module will (at one point) contain simple modules implemented in C++.
E.g. the module which is responsible for distributing the signals is IdealRadioMedium using RadioMedium. Now you need to find the Node implementation directly communicating with this module.
Starting with the WirelessHost used in the tutorial the underlying modules are
StandardHost -> ApplicationLayerNodeBase -> LinkLayerNodeBase with the later being the first one using actually implemented submodules.
The network adapter used is configured in the omnet.ini with *.host*.wlan[0].typename = "IdealWirelessNic". This module relies on Radio.
With all that found out you just need to look for API calls from Radio.cc made to RadioMedium.cc and you found the actual code responsible for sending data.
Understanding that chain of inheritance you can even hook in with your custom module at a level you find fitting. For example just implementing your own LinklayerNodeBase module.
If you are going for wireless communication and mobility, INET will still be the best framework to use.
Check out the INET Wireless Tutorial. It basically covers all the steps that you need to build a small scenario with moving nodes that communicate wirelessly.

Can't find the swift file in framework header

I'm trying to create asimple framework for testing with swift.
I had post the question in objective-c with "create the framework" before. It was resolved.
But I'm trying to create framework with swift.
I encounter the problem. I can't import the MyUtility file in header file.
like below:
Have anyone know how to import the file in my custom framework?
thank you very much.
============== edit ===========
for #Jerome L
In order to import Swift in objective C, you need to use the following syntax:
#import <ProductName/ProductModuleName-Swift.h>
So I guess in your case ti would be something like:
#import <MyFramewordSwift/MyUtility-Swift.h>
You can find more details here
I ran into the same issue. I have an all swift project and am making a pure swift framework. In order to get the target in the same project file to see the classes in my framework, I needed to explicitly add the modifier
public in front of my class declaration and in front of any method that I wanted to be accessible. Here is an example of one of the classes.
private let _sharedInstance = SomeManager()
public class SomeManager: NSObject {
//MARK: - Singleton instance
public class var sharedManager : SomeManager {
return _sharedInstance
}
public func outwardFacingMethod()-> Void {
internalMethod()
}
private func internalMethod()-> Void {
}
}
The documentation in this link states here but is a bit buried. If you scroll down to the section called Importing Code from Within the Same Framework Target it says
Because the generated header for a framework target is part of the
framework’s public interface, only declarations marked with the public
modifier appears in the generated header for a framework target.

Selenium RC User Defined Functions

Trying to do something simple -
I have a set of statements to clear browser cookies:
public void clearCookies () {
selenium.open("http://www.myurl.com");
selenium.waitForPageToLoad("10000");
selenium.deleteAllVisibleCookies();
}
Now, if I use this function in a test script (using TestNG), calls to this work perfectly. However, if I moved this function to a separate class and change the declaration to include "static", the "selenium" keyword is not recognized.
In a configuration class (say configClass),
public static void clearCookies () {
selenium.open("http://www.myurl.com");
selenium.waitForPageToLoad("30000");
selenium.deleteAllVisibleCookies();
}
Now, in my test script, if I call configClass.clearCookies();, I get a runtime error
I tried declaring DefaultSelenium selenium = new DefaultSelenium(null);, in the clearCookies() function, but that too results in a runtime error.
I do have the import com.thoughtworks.selenium.*; import in my configClass.
Any pointers would be appreciated. Thanks.
You can do two things.
Refer to the same selenium object in both the classes i.e. in configClass and the class you are calling configClass.clearCookies().
or else
send selenium object to the clearCookies. So the code would be like this
public static void clearCookies (DefaultSelenium selenium) {
selenium.open("http://www.myurl.com");
selenium.waitForPageToLoad("30000");
selenium.deleteAllVisibleCookies();
}

Resources