diff --git a/libnetutil/IPv4Header.cc b/libnetutil/IPv4Header.cc index 35dc2cacb..1891fbd7f 100644 --- a/libnetutil/IPv4Header.cc +++ b/libnetutil/IPv4Header.cc @@ -93,6 +93,7 @@ /* This code was originally part of the Nping tool. */ #include "IPv4Header.h" +#include /******************************************************************************/ /* CONTRUCTORS, DESTRUCTORS AND INITIALIZATION METHODS */ @@ -623,15 +624,24 @@ int IPv4Header::setOpts(const char *txt){ return OP_FAILURE; }else{ /* Copy options to our IP header */ - memcpy(h.options, buffer, ret); - this->ipoptlen=ret; - this->length += ret; - this->setHeaderLength(); + this->setOpts(buffer, ret); } return OP_SUCCESS; } /* End of setOpts() */ +int IPv4Header::setOpts(u8 *opts_buff, u32 opts_len){ + if(opts_buff==NULL || opts_len==0) + return OP_FAILURE; + assert(opts_len<=MAX_IP_OPTIONS_LEN); /* Max lenght for IP options */ + memcpy(this->h.options, opts_buff, opts_len); + this->ipoptlen=opts_len; + this->length += opts_len; + this->setHeaderLength(); + return OP_SUCCESS; +} /* End of setOpts() */ + + const u8 *IPv4Header::getOpts() const { return h.options; } /* End of getOpts() */ diff --git a/libnetutil/IPv4Header.h b/libnetutil/IPv4Header.h index 10cfb88b4..1a88dab29 100644 --- a/libnetutil/IPv4Header.h +++ b/libnetutil/IPv4Header.h @@ -242,6 +242,7 @@ class IPv4Header : public NetworkLayerElement { /* IP Options */ int setOpts(const char *txt); + int setOpts(u8 *opts_buff, u32 opts_len); const u8 *getOpts() const; const u8 *getOpts(int *len) const; int printOptions() const;