MCPcopy Create free account
hub / github.com/F-Stack/f-stack / memif_msg_receive_init

Function memif_msg_receive_init

dpdk/drivers/net/memif/memif_socket.c:187–255  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

185}
186
187static int
188memif_msg_receive_init(struct memif_control_channel *cc, memif_msg_t *msg)
189{
190 memif_msg_init_t *i = &msg->init;
191 struct memif_socket_dev_list_elt *elt;
192 struct pmd_internals *pmd;
193 struct rte_eth_dev *dev;
194
195 if (i->version != MEMIF_VERSION) {
196 memif_msg_enq_disconnect(cc, "Incompatible memif version", 0);
197 return -1;
198 }
199
200 if (cc->socket == NULL) {
201 memif_msg_enq_disconnect(cc, "Device error", 0);
202 return -1;
203 }
204
205 /* Find device with requested ID */
206 TAILQ_FOREACH(elt, &cc->socket->dev_queue, next) {
207 dev = elt->dev;
208 pmd = dev->data->dev_private;
209 if (((pmd->flags & ETH_MEMIF_FLAG_DISABLED) == 0) &&
210 (pmd->id == i->id) && (pmd->role == MEMIF_ROLE_SERVER)) {
211 if (pmd->flags & (ETH_MEMIF_FLAG_CONNECTING |
212 ETH_MEMIF_FLAG_CONNECTED)) {
213 memif_msg_enq_disconnect(cc,
214 "Already connected", 0);
215 return -1;
216 }
217
218 /* assign control channel to device */
219 cc->dev = dev;
220 pmd->cc = cc;
221
222 if (i->mode != MEMIF_INTERFACE_MODE_ETHERNET) {
223 memif_msg_enq_disconnect(pmd->cc,
224 "Only ethernet mode supported",
225 0);
226 return -1;
227 }
228
229 strlcpy(pmd->remote_name, (char *)i->name,
230 sizeof(pmd->remote_name));
231
232 if (*pmd->secret != '\0') {
233 if (*i->secret == '\0') {
234 memif_msg_enq_disconnect(pmd->cc,
235 "Secret required", 0);
236 return -1;
237 }
238 if (strncmp(pmd->secret, (char *)i->secret,
239 ETH_MEMIF_SECRET_SIZE) != 0) {
240 memif_msg_enq_disconnect(pmd->cc,
241 "Incorrect secret", 0);
242 return -1;
243 }
244 }

Callers 1

memif_msg_receiveFunction · 0.85

Calls 3

memif_msg_enq_disconnectFunction · 0.85
strncmpFunction · 0.85
strlcpyFunction · 0.50

Tested by

no test coverage detected