39 lines
699 B
C++
39 lines
699 B
C++
|
extern "C" {
|
||
|
#include "ext/lpm.h"
|
||
|
}
|
||
|
|
||
|
class LPMWrapper
|
||
|
{
|
||
|
public:
|
||
|
LPMWrapper()
|
||
|
{
|
||
|
d_lpm = lpm_create();
|
||
|
}
|
||
|
~LPMWrapper()
|
||
|
{
|
||
|
lpm_destroy(d_lpm);
|
||
|
}
|
||
|
|
||
|
void insert(const std::string& str, void* val=(void*)1)
|
||
|
{
|
||
|
char addr[16];
|
||
|
size_t len=sizeof(addr);
|
||
|
unsigned preflen=0;
|
||
|
lpm_strtobin(str.c_str(), addr, &len, &preflen);
|
||
|
if(lpm_insert(d_lpm, addr, len, preflen, val) < 0)
|
||
|
throw std::runtime_error("Error inserting prefix");
|
||
|
}
|
||
|
|
||
|
void* lookup(const char*str)
|
||
|
{
|
||
|
char addr[16];
|
||
|
size_t len=sizeof(addr);
|
||
|
unsigned preflen=0;
|
||
|
lpm_strtobin(str, addr, &len, &preflen);
|
||
|
return lpm_lookup(d_lpm, addr, len);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
lpm_t* d_lpm;
|
||
|
};
|